使用不同的WHERE语句从单个列返回多列数据

时间:2011-05-18 14:21:01

标签: sql sql-server

我想从我的数据库输出下表

    DateTime   |  Measure 1  |  Measure 2
    5-5-2011   |   35        |    45
    4-5-2011   |   23        |    56
    3-5-2011   |   22        |    56

我的数据库包含此近似布局的数据

    DateTime   |  Values     |  ID
    5-5-2011   |   35        |  Measure 1
    5-5-2011   |   45        |  Measure 2
    4-5-2011   |   23        |  Measure 1
    4-5-2011   |   56        |  Measure 2
    3-5-2011   |   22        |  Measure 1
    3-5-2011   |   56        |  Measure 2

无论如何,我可以在单个SQL查询中获得所需的输出。我可以通过多种选择查询轻松获取我的数据,例如

  SELECT DateTime, Values AS Measure 1 FROM database.table WHERE ID='Measure 1'
  SELECT DateTime, Values AS Measure 2 FROM database.table WHERE ID='Measure 2'

但是,我需要在单个查询中使用数据在MSSQL Report Builder中构建漂亮的图片。

有问题的数据库包含数百万个值的数百万个值。我正在运行MSSQL 2008。

我查看了Union,Case等,但无法使任何方法正常工作。

希望有人可以帮助我。我很难过,并且不知道正确的短语来搜索这个问题的帮助。如果我能破解这个坚果那么我几乎拥有所有工具来做我想做的一切。

提前谢谢

2 个答案:

答案 0 :(得分:5)

您是否找不到ID列的其他名称,这也是保留字? : - )

SELECT
    [DateTime],
    MAX(CASE WHEN ID='Measure 1' THEN [Values] END) as Measure1,
    MAX(CASE WHEN ID='Measure 2' THEN [Values] END) as Measure2
FROM
    [table]
GROUP BY
    [DateTime]

答案 1 :(得分:2)

Create Table #Measure1 (DateTime datetime,Values int)
Insert INTO #Measure1 
Select DateTime,Values from ABC where ID = 'Measure 1'

Create Table #Measure2 (DateTime datetime,Values int)
Insert INTO #Measure1 
Select DateTime,Values from ABC where ID = 'Measure 2'

Select ABC.DateTime, #Measure1.Values AS 'Measure 1',#Measure2.Values AS 'Measure 2'
FROM ABC,#Measure1,#Measure2
WHERE ABC.DateTime  = #Measure1.DateTime AND #Measure1.DateTime = #Measure2.DateTime
DROP Table #Measure1; DROP Table #Measure2;

这里我们要创建2个临时表,并使用内部连接来获得所需的结果集。如果DateTime列具有针对Measure1和Measure2的唯一值以获得所需的输出,那将更好。这里我假设数据表的名称为'ABC'