sql - 基于没有聚合的值旋转两列
问题描述
在询问之前我尝试搜索,但我没有找到与我试图弄清楚的类似的东西。我使用 sql server 来实现这一点。
现在的情况
基于年份的目标,我想调整:
- Col 作为新列的名称
- value 应该是列的值。
在该示例中,前 36 行应变为一行。每一年都应该有一排。
A B C D YEAR E F HiBioInsec HiChemInsec etc
76 1 191 4 2020 5000 2000
76 1 191 4 2021 5000 2000
我尝试使用 pivot 和 max,但没有得到预期的输出。有什么想法吗?
解决方案
实际上,PIVOT 似乎正是您所需要的。你的看起来像这样吗?这对我有用。
CREATE TABLE dbo.YourTable
(
A int,
B int,
C int,
D int,
[Year] int,
E int,
F int,
col varchar(30),
[value] int
);
INSERT dbo.YourTable (A,B,C,D,[Year],col, [value])
VALUES (76, 1, 191, 4, 2020, 'HiBioInsec', 5000);
INSERT dbo.YourTable (A,B,C,D,[Year],col, [value])
VALUES (76, 1, 191, 4, 2020, 'HiChemInsec', 2000);
INSERT dbo.YourTable (A,B,C,D,[Year],col, [value])
VALUES (76, 1, 191, 4, 2021, 'HiBioInsec', 5000);
INSERT dbo.YourTable (A,B,C,D,[Year],col, [value])
VALUES (76, 1, 191, 4, 2021, 'HiChemInsec', 2000);
SELECT A,B,C,D,[Year],E,F
, pvt.HiBioInsec
, pvt.HiChemInsec
FROM
(
SELECT A,B,C,D,[Year],E,F,col, SUM([value]) AS SumValue
FROM dbo.YourTable [tbl]
GROUP BY A,B,C,D,[Year],E,F,col
) src
PIVOT (SUM(SumValue) FOR col IN ([HiBioInsec],[HiChemInsec])) pvt
你能发布你的SQL吗?
您也可以尝试这样的事情,但我不知道如何使用聚合来解决问题。
SELECT A,B,C,D,[Year],E,F
, SUM(HiBioInsec) AS HiBioInsec
,SUM(HiChemInsec) AS HiChemInsec
FROM
(
SELECT A,B,C,D,[Year],E,F, [value] AS HibioInsec ,NULL AS HiChemInsec
FROM dbo.YourTable WHERE col = 'HiBioInsec'
UNION ALL
SELECT A,B,C,D,[Year],E,F, NULL AS HibioInsec , [value] AS HiChemInsec
FROM dbo.YourTable WHERE col = 'HiChemInsec'
) tbl
GROUP BY A,B,C,D,[Year],E,F
推荐阅读
- qt - Qt QML 函数可能使应用程序崩溃是一个已知问题吗?
- javascript - 鼠标悬停移动图像位置
- android-studio - Git 提交选项卡未显示
- sweetalert2 - sweetalert2 TypeError:v8 升级后未定义
- python - 对于相同的 keras 模型,我得到不同的结果
- android - 在 Android Studio 中打开 Unity 项目时找不到资源异常
- sql - 未显示 ADODB 记录集的字段
- javascript - 如何在javascript中从另一个文件调用模块导出函数
- c# - 有没有比 C# 中的 SoundPlayer 更快的方法来播放声音?
- amazon-web-services - 如何使用 AWS 创建 n 个代理