繁体   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