簡體   English   中英

從 SQL 子查詢中檢索特定列數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM