我正在使用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]

10-05 22:49