我正在使用SQLite,但是我确实很绿。基本上,我有一张桌子(下面的示例)
ID Date QuestNum Value
1 1/1/1990 1 0
1 1/1/1990 2 3
1 1/1/1990 3 2
1 1/2/1990 1 5
1 1/2/1990 2 2
1 1/2/1990 3 6
2 1/1/1990 1 6
2 1/1/1990 2 3
2 1/1/1990 3 6
2 1/2/1990 1 2
2 1/2/1990 2 8
2 1/2/1990 3 2
我将查询的结果看起来像这样
ID Date Quest1 Quest2 Quest3
1 1/1/1990 0 3 2
1 1/2/1990 5 2 6
2 1/1/1990 6 3 6
2 1/2/1990 2 8 2
我最近的是
SELECT
ID, Date,
MAX(CASE WHEN QuestNum = "1" THEN Value END) AS Q1,
MAX(CASE WHEN QuestNum = "2" THEN Value END) AS Q2,
MAX(CASE WHEN QuestNum = "3" THEN Value END) AS Q3,
FROM table
GROUP BY subjID, Date
尽管它确实提供了结构,但我正在寻找它应用MAX聚合函数的方法,并且我担心结果查询包含的数据与原始集合不同;这样,在Quest 1,Quest 2,Quest 3列中返回的值就是所选列的最大值,而不是value列中的相应数据点。
我不确定要注意是否重要,但是QuestNum有时会跳过,因此并不是每个人都会收到所有问题。
谢谢,
qwerty
请原谅我的要求不当,相信我他们都是无意的。
最佳答案
本质上,您需要将的行转置为列,或者将的格式从长格式转换为宽格式。在SQL中,这可以通过派生表(子查询的类型)完成:
SELECT
[ID],
[Date],
Max(CASE WHEN QuestNum = "1" THEN [Value] END) As Q1,
Max(CASE WHEN QuestNum = "2" THEN [Value] END) As Q2,
Max(CASE WHEN QuestNum = "3" THEN [Value] END) As Q3
FROM (SELECT
[ID],
[Date],
QuestNum,
[Value]
FROM TableName)
AS dT
GROUP BY [ID], [Date]