2017-08-05 74 views
-10

我通过我得到的一些数据,现在下面多行合并成一个在SQL

col1  col2 col3 col4 col5 col6 col7 
------------------------------------------------------------ 
SA106141 ABC test 1400 0  0   58800 
SA106141 ABC test 1100 53963 54 54017 
SA106141 ABC test 3000 141184 141 141325 
SA106141 ABC test 2800 154548 155 154703 
SA106141 ABC test 1500 79042 79 79121 
SA106141 ABC test -9800 -487967 0 0 

,但给定一个表所需的输出应该是

col1 col2 col3 col4 col5 col6 col7 
SA106141 ABC test 0  -59229 429  0 

这是查询我有到目前为止:

SELECT DISTINCT 
    col1, col2, col3, 
    ISNULL(SUM(QTY), 0) AS col4, 
    ISNULL(SUM(NET_AMT), 0) AS col5, 
    ISNULL(SUM(STT), 0) AS col6, 
    CASE 
     WHEN ISNULL(SUM(grand_total), 0) <= 0 
      THEN 0 
      ELSE ISNULL(SUM(grand_total), 0) 
    END AS col7 
FROM 
    (SELECT 
     Dates, TR_DT, TR_NO, SA, GRP, ID, SAID, Exch, Code, 
     Client, SCRIPT, BUYSELL, QTY, NT_RT, NET_AMT, 
     QTY * NT_RT AS New_Net_amt,STT, 
     ISNULL(NET_AMT + STT,QTY * NT_RT) AS grand_total, 
     CAST(SA + GRP + ID + SAID AS VARCHAR(50)) AS testid 
    FROM 
     testtable 
    GROUP BY 
     CAST (SA + GRP + ID + SAID AS VARCHAR(50)), Dates, TR_DT, 
     TR_NO, Exch, Code, Client, SCRIPT, BUYSELL, QTY, 
     NT_RT, NET_AMT, STT, SA, GRP, ID, SAID) t 
GROUP BY 
    t.testid, t.Dates, t.Client, t.SCRIPT 
ORDER BY 
    t.Client, t.testid, t.SCRIPT, t.Dates ASC 

请帮

+3

你能解释一下组合行所需的逻辑吗?另外,您目前查询的问题究竟是什么? – Mureinik

+0

逻辑是col2有ABC的多条记录我只需要单个ABC,col4和col4和col6和abc中col4的总和可以和多个用户一样测试1 test2,test3 soi需要一个查询,显示test1 abc col4 total col5 total col6 total –

+2

查询你粘贴的does not似乎与你在这里解释的逻辑有任何关系。该查询中使用了更多的列! – Hybridzz

回答

0

这是你在找什么?

select 
    col1, col2, col3, 
    sum(isnull(col4, 0)) col4, 
    sum(isnull(col5, 0)) col5, 
    sum(isnull(col6, 0)) col6, 
    sum(isnull(col7, 0)) col7 
FROM 
    testtable 
group by 
    col1, col2, col3 
+3

你在这里缺少'FROM dbo.SomeTable'子句... –

+0

是的更新。 – Hybridzz