根据列选择表中的行

时间: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

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

由于