2013-03-05 71 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