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