簡體   English   中英

用不同的條件子查詢同一列

[英]Sub-query same column with different criteria

我正在嘗試編寫一個子查詢來從我已經使用主查詢選擇的列之一中檢索值,但條件不同。

在此處輸入圖像描述

在此處輸入圖像描述

你能試試這個嗎,我想你可以使用收費和信用的子查詢:

SELECT DISTINCT
       [date],[customer],
       Charge = (SELECT Revenue FROM TABLE t2 WHERE t2.customer = t1.customer AND t2.[type] = 'Charge'), 
       Credit = (SELECT Revenue FROM TABLE t2 WHERE t2.customer = t1.customer AND t2.[type] = 'Credit')
FROM TABLE t1

使用示例數據:

CREATE TABLE #temp (thedate date, customer VARCHAR(100), revenue INT, [type] VARCHAR(100))
INSERT INTO #temp values ('2019-01-01','a',10,'charge'),('2019-01-01','a',20,'Credit'),('2019-01-01','b',30,'charge')

SELECT DISTINCT
       [thedate], [customer],
       Charge = (SELECT Revenue FROM #temp t2 WHERE t2.customer = t1.customer AND t2.[type] = 'Charge'), 
       Credit = (SELECT Revenue FROM #temp t2 WHERE t2.customer = t1.customer AND t2.[type] = 'Credit')
FROM #temp t1

我相信這就是您正在尋找的:

CREATE TABLE #temp (thedate date, customer VARCHAR(100), revenue INT, [type] VARCHAR(100))

INSERT INTO #temp values ('2019-01-01','Acme, Inc.',1000,'Charge')
                        ,('2019-01-01','Amazon',500,'Charge')
                        ,('2019-01-01','Acme, Inc.',100,'Credit')

SELECT [Date]
    , [Customer]
    , [Revenue] as [Charge]
    , [Credit]
FROM #temp t1
OUTER APPLY (
    SELECT sum(revenue) credit
    FROM #temp t2
    WHERE t1.customer = t2.customer
        AND t2.[type] = 'credit'
    ) x
WHERE t1.[type] = 'charge'

僅根據您的輸入數據和預期結果判斷,上述查詢就足夠了。 但是,您在問題上發布的評論與預期結果的圖像顯示的內容略有矛盾。

這是我查詢的 output,根據您的輸入數據:

在此處輸入圖像描述

CREATE TABLE #temp (thedate date, customer VARCHAR(100), revenue INT, [type] VARCHAR(100))

INSERT INTO #temp values ('2019-01-01','Acme, Inc.',1000,'Charge')
                        ,('2019-01-01','Amazon',500,     'CREDIT')
                        ,('2019-01-01','Acme, Inc.',100, 'Credit')


SELECT  THEDATE,
        CUSTOMER,
        MAX(CASE
            WHEN TYPE = 'CREDIT' THEN revenue
        END) AS CREDIT,
        MAX(CASE
            WHEN TYPE = 'CHARGE' THEN REVENUE
        END) AS CHARGE
FROM #TEMP
GROUP BY CUSTOMER, THEDATE

或者你可以試試 PIVOT Function

SELECT  *
FROM #TEMP
PIVOT (MAX(REVENUE)
        FOR 
        [TYPE] IN ([CHARGE],[CREDIT])
        ) AS PIV

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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