sql-server - 如何修复“来自同一ID的所有数据到一行”?
问题描述
我正在尝试使用Case
语句将行转换为列并且它有效,但我有重复的 ID。
000001 NULL NULL NULL 12075000.000 NULL NULL NULL NULL NULL NULL NULL NULL
000001 NULL NULL NULL NULL 10500000.000 NULL NULL NULL NULL NULL NULL NULL
000001 NULL NULL NULL NULL NULL 10500000.000 NULL NULL NULL NULL NULL NULL
000001 NULL NULL NULL NULL NULL NULL 10500000.000 NULL NULL NULL NULL NULL
000001 NULL NULL NULL NULL NULL NULL NULL 10500000.000 NULL NULL NULL NULL
000001 NULL NULL NULL NULL NULL NULL NULL NULL 10500000.000 NULL NULL NULL
第一列是id
列,其他列代表月份。如您所见,id
's 是相同的。有没有办法在所有 12 个月的每个 id 的一行中显示数据?
SELECT CID,
(CASE WHEN EOMDATE = '2018-08-16' THEN BALANCE end) AS SHRAWAN,
(CASE WHEN EOMDATE = '2018-09-16' THEN BALANCE end) AS BHADAU,
(CASE WHEN EOMDATE = '2018-10-17' THEN BALANCE end) AS ASHOJ,
(CASE WHEN EOMDATE = '2018-11-16' THEN BALANCE end) AS KARTIK,
(CASE WHEN EOMDATE = '2018-12-15' THEN BALANCE end) AS MANGSHIR,
(CASE WHEN EOMDATE = '2019-01-14' THEN BALANCE end) AS POUSH,
(CASE WHEN EOMDATE = '2019-02-12' THEN BALANCE end) AS MAGH,
(CASE WHEN EOMDATE = '2019-03-14' THEN BALANCE end) AS FALGUN,
(CASE WHEN EOMDATE = '2019-04-13' THEN BALANCE end) AS CHAITRA,
(CASE WHEN EOMDATE = '2019-05-14' THEN BALANCE end) AS BAISHAKH,
(CASE WHEN EOMDATE = '2019-06-16' THEN BALANCE end) AS JETH,
(CASE WHEN EOMDATE = '2019-07-17' THEN BALANCE end) AS ASHAD
FROM
(SELECT R.BR, R.CID, E.EOMDate, SUM(E.BALANCEAMT) AS BALANCE
FROM T_EOMHIST E
LEFT JOIN T_RELACC R ON E.Acc = R.Acc AND E.BR = R.BR AND E.APPTYPE IN ('1','3')
LEFT JOIN T_GLLINK G ON G.BR = E.BR AND G.Code = E.GlCode AND G.CoopRep01 = 'Y' and G.TableId in ('10','30')
LEFT JOIN T_GLCONTROL H ON H.BR = E.BR
WHERE H.FinYear = '2018' AND E.EOMDate BETWEEN H.FinYrStartDate AND H.FinYrEndDate
AND R.TYPE = '010' AND R.AppType IN ('1','3')
AND CID = '000001'
GROUP BY R.BR, R.CID, E.EOMDATE)T
WHERE CID = '000001'
这是选择查询的代码。
预期结果是同一列的单行记录。仅显示NULL
没有任何数据。我也尝试过使用该GROUP BY
子句,但它显示了一些错误,说聚合函数。
解决方案
SELECT CID,
SUM(ISNULL(CASE WHEN EOMDATE = '2018-08-16' THEN BALANCE end, 0)) AS SHRAWAN,
SUM(ISNULL(CASE WHEN EOMDATE = '2018-09-16' THEN BALANCE end, 0)) AS BHADAU,
SUM(ISNULL(CASE WHEN EOMDATE = '2018-10-17' THEN BALANCE end, 0)) AS ASHOJ,
SUM(ISNULL(CASE WHEN EOMDATE = '2018-11-16' THEN BALANCE end, 0)) AS KARTIK,
SUM(ISNULL(CASE WHEN EOMDATE = '2018-12-15' THEN BALANCE end, 0)) AS MANGSHIR,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-01-14' THEN BALANCE end, 0)) AS POUSH,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-02-12' THEN BALANCE end, 0)) AS MAGH,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-03-14' THEN BALANCE end, 0)) AS FALGUN,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-04-13' THEN BALANCE end, 0)) AS CHAITRA,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-05-14' THEN BALANCE end, 0)) AS BAISHAKH,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-06-16' THEN BALANCE end, 0)) AS JETH,
SUM(ISNULL(CASE WHEN EOMDATE = '2019-07-17' THEN BALANCE end, 0)) AS ASHAD
FROM FROM
...
GROUP BY CID
或者,如果您需要 NULL 而不是 0:
NULLIF(SUM(ISNULL(CASE WHEN EOMDATE = '2018-08-16' THEN BALANCE end, 0)), 0) AS SHRAWAN
推荐阅读
- react-native - 风格可能是假的,但不是真的 galio.io
- android - FusedLocationApi.getLastLocation 在后台始终为空
- ruby - 将正整数转换为负整数
- python - 来自 sympy 的命令 linsolve 或求解无法求解一维线性方程
- swift - 如何在标签栏控制器项目范围内显示底部标签?
- yaml - IPA 文件未在 ReactNative iOS 应用程序的 Azure Devops 管道集成中生成
- javascript - JS 语义:为什么私有和公共类属性似乎被重新排序?
- parsing - 第四次跳过 ATLAST 中的输入流
- javascript - 如何将指令从 main.js 移动到外部文件 Vue 3
- geom-segment - 将点图中的线段变成箭头