组不同或更改为多个子查询

时间:2012-12-26 15:37:35

标签: sql sql-server-2005

我是一名.net开发人员,除了基本的CRUD之外,没有做很多SQL。

我在SQL Server 2005中有一个表:

CREATE TABLE [dbo].[Cases](
    [CasesID] [int] IDENTITY(1,1) NOT NULL,
    [Enterprise_Date_Key] [int] NOT NULL,
    [Interval_Num] [int] NOT NULL,
    [QueueID] [int] NOT NULL,
    [TotalCases] [int] NOT NULL,

数据类似于:

4609    3   0   12455   4532
4610    3   0   12452   7963
4625    3   1   12455   4542
4626    3   1   12452   7993
4627    3   2   12455   4552
4628    3   2   12452   7823
.

我运行查询:

set @enterpriseDateKey = 3
select QueueID, interval_num, max(TotalCases)
    from Case_Process_Status_Hourly_Fact a  
    where a.Enterprise_Date_Key = @enterpriseDateKey    
    group by QueueID,Interval_Num

结果是:

12452   0   4532
12455   0   7963
12452   1   4542
12455   1   7993
12452   2   4552
12455   3   7823
.
.
.

我需要一个查询的帮助,该查询将以不同的方式对数据进行分组,其中间隔为列(X轴),QueueID在行(Y轴)上分组。如:

12452   4532    4542    4552    .   .
12455   7963    7993    7823    .   .

我会说实话,我不知道要朝哪个方向取得理想的结果。我不知道是否应该沿着创建多个子查询的路径来获取我的数据,或者是否有任何方法可以进行不同的分组以获得我想要的结果。任何建议都会非常有帮助。

3 个答案:

答案 0 :(得分:1)

在SQL Server中,将结果从行转换为列的方法不止一种。在这种情况下,最明显的方法似乎是使用聚合:

select QueueID,
      max(case when interval_num = 0 then TotalCases end) as Int0,
      max(case when interval_num = 1 then TotalCases end) as Int1,
      max(case when interval_num = 2 then TotalCases end) as Int2,
      max(case when interval_num = 3 then TotalCases end) as Int3,
      . . .
from Case_Process_Status_Hourly_Fact a  
where a.Enterprise_Date_Key = @enterpriseDateKey    
group by QueueID

这实际上是您的select子句具有透视列的查询。在SQL中,您必须指定列数,因此请输入您认为必要的数字。

答案 1 :(得分:1)

由于您使用的是SQL Server 2005,因此您还可以实现PIVOT功能:

select QueueID,
  [0] as Int_0, 
  [1] as Int_1, 
  [2] as Int_2, 
  [3] as Int_3
from
(
  select QueueID, interval_num, TotalCases
  from Case_Process_Status_Hourly_Fact a  
  where a.Enterprise_Date_Key = @enterpriseDateKey   
) src
pivot
(
  max(TotalCases)
  for interval_num in ([0], [1], [2], [3])
) piv

请记住,如果您拥有未知数量的interval_num值,您还可以实现动态SQL来执行此数据转换。

答案 2 :(得分:0)

请看一下

http://stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns

它可能对你有所帮助

或者在网上寻找T-SQL。它可以帮助你。