根据列选择表中的行

时间:2016-01-04 10:50:41

标签: sql-server select

我有下表(table1):

CODE    PRICE   ID
111     582     1
222     384     2
333     659     1
111     683     2
444     987     2
555     128     2
333     851     1
222     398     2

我需要对所有代码进行分组,然后显示3列,代码,然后在ID = 1时显示价格总和,另一个在ID = 2时显示价格总和。

结果表应如下所示:

CODE    PRICE_1   PRICE_2
111     582       0
222     0         683
333     1510      782
444     0         987
555     0         128

我能够创建一些查询,例如:

select CODE, (select SUM(PRICE) from TABLE1 where ID = 1), (select SUM(PRICE)
from TABLE1
group by CODE

但我得到了这个,其中PRICE_1和PRICE_2是所有这些的总和,而不是按CODE(111,222等)对它们进行分组。我不知道如何将它们分组到"子选择"。

CODE    PRICE_1   PRICE_2
111     2092      2580
222     2092      2580
333     2092      2580
444     2092      2580
555     2092      2580

2 个答案:

答案 0 :(得分:3)

试试这个 -

SELECT CODE,
       (
           SELECT SUM(Price)
           FROM table1 a
           WHERE a.ID = 1
                AND a.CODE = b.CODE
       ),
       (
           SELECT SUM(Price)
           FROM table1 a
           WHERE a.ID = 2
                AND a.CODE = b.CODE
       )
FROM table1 b
GROUP BY CODE

没有重新阅读:

SELECT
    CODE,
    ISNULL(SUM(CASE WHEN ID = 1 THEN Price END), 0),
    ISNULL(SUM(CASE WHEN ID = 2 THEN Price END), 0)
FROM table1
GROUP BY CODE

答案 1 :(得分:0)

select code,case when id=1 then sum(price) end, case when id=2 then sum(price) end from R5ORDERLINES

按代码分组,按代码分类ID

试试这个它将起作用输出

 Code  Price1  Price2
 111    582     NULL
 111    NULL    683
 222    NULL    782
 333    1510    NULL
 444    NULL    987
 555    NULL    128

存在细微差别,但查询提供了所有值。

由于

相关问题