DB是SQL Server 2008的組/骨料上在SQL
表A的列的不同值:
值在 '標識符' 柱:A,B,C,d,E,F 值在 '餘額' 柱:10,100,30,50,70,55
所需的結果集:
值在 'Identifier_New' 柱:Z,Y,X 值在總和(餘額)柱: 40,170,105
邏輯地圖總結結餘:標識符A和C作爲Z的
總和和組餘額 標識符B和E爲Y的總和與組餘額 標識符d和E爲X的總和和組餘額。
我可以在單個sql中獲得上述所需的結果集嗎?
感謝
DB是SQL Server 2008的組/骨料上在SQL
表A的列的不同值:
值在 '標識符' 柱:A,B,C,d,E,F 值在 '餘額' 柱:10,100,30,50,70,55
所需的結果集:
值在 'Identifier_New' 柱:Z,Y,X 值在總和(餘額)柱: 40,170,105
邏輯地圖總結結餘:標識符A和C作爲Z的
總和和組餘額 標識符B和E爲Y的總和與組餘額 標識符d和E爲X的總和和組餘額。
我可以在單個sql中獲得上述所需的結果集嗎?
感謝
試試這個:
SELECT x.v AS Identifier_New, SUM(Balances)
FROM mytable
CROSS APPLY (SELECT CASE Identifier
WHEN 'A' THEN 'Z'
WHEN 'C' THEN 'Z'
WHEN 'B' THEN 'Y'
WHEN 'E' THEN 'Y'
WHEN 'D' THEN 'X'
WHEN 'F' THEN 'X'
END) AS x(v)
GROUP BY x.v
SELECT CASE WHEN Identifier = 'A' or Identifier = 'C' THEN 'Z'
WHEN Identifier = 'B' or Identifier = 'E' THEN 'Y'
WHEN Identifier = 'D' or Identifier = 'F' THEN 'X'
END AS [Identifier_New],
SUM(Balances) AS [Sum of Balances]
FROM TABLE A
GROUP BY CASE WHEN Identifier = 'A' or Identifier = 'C' THEN 'Z'
WHEN Identifier = 'B' or Identifier = 'E' THEN 'Y'
WHEN Identifier = 'D' or Identifier = 'F' THEN 'X'
END
我嘗試了斯坦和喬爾戈斯的答案,兩人都很好。多謝你們。 – AOB
@AOB如果答案對你有幫助,請注意。 –
很好的答案。這和我的表現有區別嗎?還是交叉申請的服務本質上是速記? –
@StanShaw我認爲'CROSS APPLY'在這種情況下只是語法糖。這兩個查詢應該具有相同的性能。 –
感謝您的信息 - 我將閱讀並開始使用它。 –