2013-03-05 62 views
1

不知道它是如何调用,我需要这样做:SQL Server查询分解表

+---------------+ 
| param | value | 
| 1 | 3 | 
| 1 | 3 | 
| 2 | 4 | 
| 2 | 4 | 
+-------+-------+ 

+-----------------+ 
| param1 | param2 | 
| 3 | 4 | 
| 3 | 4 | 
+-------+---------+ 

是否有可能不INNER JOIN

我的错误在哪里?

SELECT TOP 10 
    dbo.RW_ReceivedData.[Value] AS Value1, 
    dbo.RW_ReceivedData.[Value] AS Value2 
FROM 
    RW_ReceivedData 
WHERE 
    dbo.RW_ReceivedData.LogicalName = CAST(0x01000F0800FF AS varbinary(8000)), 
    dbo.RW_ReceivedData.LogicalName = CAST(0x01000F0800FF AS varbinary(8000)) 

回答

1

这应该工作:

DECLARE @cols NVARCHAR(4000) 
= STUFF(
    (
     SELECT DISTINCT ',[' + CAST(param AS VARCHAR(10)) + ']' 
     FROM tbl 
     FOR XML PATH('') 
    ),1,1,'') 

DECLARE @colNames NVARCHAR(4000) 
= STUFF(
    (
     SELECT DISTINCT ',[' + CAST(param AS VARCHAR(10)) + '] AS param' + CAST(param AS VARCHAR(10)) 
     FROM tbl 
     FOR XML PATH('') 
    ),1,1,'') 

DECLARE @sql NVARCHAR(4000) = 
' 
SELECT '[email protected]+' 
FROM  
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY param ORDER BY param) n 
    FROM tbl 
) t 
PIVOT 
(
    MIN(value) FOR param IN ('[email protected]+') 
) pvt' 

EXEC(@sql) 

这里是SQL Fiddle

这种方法使用动态PIVOT。为了得到预期的结果ROW_NUMBER()与分区被使用,因为param列中的值不是唯一的。

UPDATE

你也可以尝试一下这样的,但是你必须手动添加列查询:

SELECT SUM(CASE WHEN param = 1 THEN value ELSE 0 END) param1 
     , SUM(CASE WHEN param = 2 THEN value ELSE 0 END) param2 
     , SUM(CASE WHEN param = 3 THEN value ELSE 0 END) param3 
FROM 
    (
     SELECT * 
       , ROW_NUMBER() OVER (PARTITION BY param ORDER BY param) num 
     FROM tbl 
    ) t 
GROUP BY 
     num 

SQL Fiddle

如果你不想自动处理色谱柱,只需使用静态PIVOT

SELECT [1] AS param1 
     ,[2] AS param2 
FROM (  
    SELECT * 
      , ROW_NUMBER() OVER (PARTITION BY param ORDER BY param) n  
    FROM tbl) t 
PIVOT (  
    MIN(value) FOR param IN ([1],[2]) 
) pvt 
+0

有没有办法做到这一点不自动?:)我想在一个查询中使用'SELECT value FROM tbl WHERE param = 1'和'SELECT value FROM tbl WHERE param = 2' – user840250 2013-03-05 07:49:02

+0

@ user840250我更新了我的答案,也许这将符合你的需求。 – 2013-03-05 08:17:52

+0

适合我,谢谢 – user840250 2013-03-05 10:01:42