簡體   English   中英

SQL求和字段並選擇一列(有條件)並求和另一列

[英]SQL sum field and select a column (with condition) and sum another column

我有一條選擇聲明:

  SELECT ID, A, B, C, D
    FROM MyTable
GROUP BY ID, A, B, C, D
  HAVING D >= '14/06/2013'
     AND D <= '17/06/2013'

顯示此:

ID   |    A   |    B    |   C   |     D   
--------------------------------------------
11   |  1370  |    0    |  0    |  14/06/2013
11   |  1370  |   100   |  0    |  15/06/2013
11   |  1470  |   400   |  0    |  16/06/2013
11   |  1870  |    0    | 300   |  17/06/2013

我想要的結果是:

ID   | min of D|  Sum(B) |  Sum(C) |  max of D|   MIN(D)
11   |  1370   |   500   |   300   |   1870   |  14/06/2013

如何在SQL Server上執行此操作

這是一種方法(假設使用SQL Server 2005+):

;WITH CTE AS
(
    SELECT  *,
            RN1 = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY D DESC),
            RN2 = ROW_NUMBER() OVER(PARTITION BY ID ORDER BY D)
    FROM YourTable
    WHERE D >= '20130614'
    AND D <= '20130617'
)
SELECT  ID,
        MIN(CASE WHEN RN2 = 1 THEN A END) [min of D],
        SUM(B) [Sum(B)],
        SUM(C) [Sum(C)],
        MIN(CASE WHEN RN1 = 1 THEN A END) [max of D],
        MIN(D) [Min(D)]
FROM CTE
GROUP BY ID

結果:

╔════╦══════════╦════════╦════════╦══════════╦════════════╗
║ ID ║ MIN OF D ║ SUM(B) ║ SUM(C) ║ MAX OF D ║  MIN(D)    ║
╠════╬══════════╬════════╬════════╬══════════╬════════════╣
║ 11 ║     1370 ║    500 ║    300 ║     1870 ║ 2013-06-14 ║
╚════╩══════════╩════════╩════════╩══════════╩════════════╝

這是一個帶有此演示的sqlfiddle

您可以通過JOIN做到這一點

SELECT  T.ID ,
        MAX(G.B) AS [SUM(B)],
        MAX(G.C) AS [SUM(C)],
        MAX(MINI)AS [MIN(D)] ,
        MAX(CASE WHEN T.D = G.MINI THEN T.A ELSE NULL END ) AS [MIN OF D],
        MAX(CASE WHEN T.D = G.MAXI THEN T.A ELSE NULL END ) AS [MAX OF D]
FROM    TEST T
JOIN    ( SELECT ID , SUM(B) B ,SUM(C) C ,MIN(D) AS MINI ,MAX(D) AS MAXI
          FROM  test 
          WHERE D >= '06/14/2013'
             AND D <= '06/17/2013'
          GROUP BY  ID ) G ON G.ID = T.ID
GROUP BY T.ID

SQL Fiddle演示這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM