SQL return table 中每列的结果中有 1 行
SQL return 1 row in results for each column in table
诚然,我不擅长 pivot/unpivot,但似乎这与 "transpose" 比我正在寻找的更直接。
我需要做的是为 table.
中的一组列中的每一列创建一个包含 1 行的结果集
宿舍Table:
USER Q1 Q2 Q3 Q4
-----------------------
USER1 1 5 3 3
USER2 2 1 1 8
期望的结果:
USER Q V
--------------
USER1 Q1 1
USER1 Q2 5
USER1 Q3 3
USER2 Q4 3
USER2 Q1 2
USER2 Q2 1
USER2 Q3 1
USER2 Q4 1
一种"funny"的方法是使用CROSS APPLY
:
SELECT Q.[USER],
X.Q,
X.V
FROM dbo.Quarters Q
CROSS APPLY
(
VALUES
('Q1', t.Q1),
('Q2', t.Q2),
('Q3', t.Q3),
('Q4', t.Q4)
) X (Q, V);
确保用于消除 null 的值未出现在您的数据集中!
SELECT
[user]
,V = IIF(V = -99999,NULL,V)
,Q
FROM
(
SELECT
[user]
,Q1 = ISNULL(t.Q1,-99999)
,Q2 = ISNULL(t.Q2,-99999)
,Q3 = ISNULL(t.Q3,-99999)
,Q4 = ISNULL(t.Q4,-99999)
FROM
@Table t) p
UNPIVOT
(V FOR Q IN (Q1,Q2,Q3,Q4)
) as unpvt
要根据您的评论允许 null,必须使用 hack 将 null 值设置为其他值并将其恢复为 null。 (SQL Server - Include NULL using UNPIVOT) 当想要包含交叉应用方法时,对我来说变得更有吸引力了。
在我看来,UNPIVOT 对您很有用,因为您有已知数量的季度。
此处供参考的是 link Mirosoft 在 PIVOT 和 UNPIVOT 上的站点。 https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
使用UNPIVOT
查询变得更加简单。使用 UNPIVOT,查询看起来像...
Select Users
, Q
, V
FROM TableName
UNPIVOT (
V FOR Q IN (Q1,Q2,Q3,Q4)
)up
诚然,我不擅长 pivot/unpivot,但似乎这与 "transpose" 比我正在寻找的更直接。 我需要做的是为 table.
中的一组列中的每一列创建一个包含 1 行的结果集宿舍Table:
USER Q1 Q2 Q3 Q4
-----------------------
USER1 1 5 3 3
USER2 2 1 1 8
期望的结果:
USER Q V
--------------
USER1 Q1 1
USER1 Q2 5
USER1 Q3 3
USER2 Q4 3
USER2 Q1 2
USER2 Q2 1
USER2 Q3 1
USER2 Q4 1
一种"funny"的方法是使用CROSS APPLY
:
SELECT Q.[USER],
X.Q,
X.V
FROM dbo.Quarters Q
CROSS APPLY
(
VALUES
('Q1', t.Q1),
('Q2', t.Q2),
('Q3', t.Q3),
('Q4', t.Q4)
) X (Q, V);
确保用于消除 null 的值未出现在您的数据集中!
SELECT
[user]
,V = IIF(V = -99999,NULL,V)
,Q
FROM
(
SELECT
[user]
,Q1 = ISNULL(t.Q1,-99999)
,Q2 = ISNULL(t.Q2,-99999)
,Q3 = ISNULL(t.Q3,-99999)
,Q4 = ISNULL(t.Q4,-99999)
FROM
@Table t) p
UNPIVOT
(V FOR Q IN (Q1,Q2,Q3,Q4)
) as unpvt
要根据您的评论允许 null,必须使用 hack 将 null 值设置为其他值并将其恢复为 null。 (SQL Server - Include NULL using UNPIVOT) 当想要包含交叉应用方法时,对我来说变得更有吸引力了。
在我看来,UNPIVOT 对您很有用,因为您有已知数量的季度。
此处供参考的是 link Mirosoft 在 PIVOT 和 UNPIVOT 上的站点。 https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
使用UNPIVOT
查询变得更加简单。使用 UNPIVOT,查询看起来像...
Select Users
, Q
, V
FROM TableName
UNPIVOT (
V FOR Q IN (Q1,Q2,Q3,Q4)
)up