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