[英]Retrieving specific column data from SQL sub-query
我的目標是拉出圖中紅色顯示的值。
我使用此查詢將數據拉到一起。 這些行通過 ActionID 關聯並使用顯示的“AND”條件進行過濾。
SELECT [lclTime],[Descript],[Event],[PValue],[Phase],[ActionID]
FROM TableA
WHERE uniqueid = 5742
AND ActionID <> 0
AND LEN(Phase) = 0
AND [ActionID] in
(
SELECT [ActionID] FROM TableA
WHERE uniqueid = 5742
AND ActionID <> 0
AND LEN(Phase) = 0
GROUP BY [ActionID]
HAVING COUNT(*) > 2
)
我想我可以把上面的輸出作為另一個查詢的輸入,讓我選擇我需要提取的值。 但是沒有成功。 我還認為,也許 PIVOT 可用於提取列中的值……但我需要來自多個列的值,並且無法使該語法起作用。
這可以在沒有臨時表的情況下完成嗎? 我不認為將執行此代碼的第 3 方應用程序與臨時表配合得很好。
提前致謝。
更新:我應該澄清我試圖為結果集實現的目標。 對於子查詢描述的每個集合,我試圖為每個唯一的 ActionID 提取一條記錄。 並且帶有ActionID的值在Event=Successful Signoff時包括lclTime、Descript和Pvalue的值,當Event=State Command時包括PValue的值。
我懷疑您想要條件聚合,為滿足過濾條件且至少出現 3 次的每個actionid
帶來事件“狀態命令”和“成功actionid
”的值。
如果是這樣,您可以使用窗口計數進行過濾,然后使用條件聚合進行透視:
select actionid,
max(case when event = 'State Command' then pvalue end) command_value,
max(case when event = 'State Command' then lcltime end) command_lcltime,
max(case when event = 'Successful Signoff' then pvalue end) signoff_value,
max(case when event = 'Successful Signoff' then lcltime end) signoff_lcltime,
from (
select a.*, count(*) over(partition by actionid) cnt
from tablea
where uniqueid = 5742 and actionid <> 0 and len(phase) = 0
) t
where cnt > 2
group by actionid
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.