2013-10-21 96 views
5

我需要一個查詢,將數據從標籤進行排序,並把它變成NEWTAB,它看起來像這樣:多SELECT INTO查詢

我使用SQL Server 2008 R2 Express和我試過代碼:

INSERT INTO NewTab(Var1,Var2,Var3,DTime) VALUES (
    (SELECT Value FROM Tab WHERE VarName='Var1'), 
    (SELECT Value FROM Tab WHERE VarName='Var2'), 
    (SELECT Value FROM Tab WHERE VarName='Var3'), 
    (SELECT DTime FROM Tab WHERE VarName='Var1') 
    ) 

但服務器返回錯:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我對SQL很陌生,如果有人能幫助我,我會很感激。

+0

嘗試以下建議: http://stackoverflow.com/questions/19107174/column-row-transpose-in-oracle-sql – michael

+0

這我是如何做轉置的。請參閱下面的鏈接 http://stackoverflow.com/questions/19107174/column-row-transpose-in-oracle-sql – michael

回答

4

您似乎在試圖調整數據。還有其他的方法來做到這一點(即使用PIVOT運算符),但我想,使用老派的聚集函數幫助我們獲得數據如何更好的主意處理:

SELECT DTime 
, SUM(CASE WHEN varname = 'Var1' THEN value ELSE NULL END) AS [Var1] 
, SUM(CASE WHEN varname = 'Var2' THEN value ELSE NULL END) AS [Var2] 
, SUM(CASE WHEN varname = 'Var3' THEN value ELSE NULL END) AS [Var3] 
FROM Tab 
GROUP BY DTime 
+1

它不會像它的效率(在你的例子中,觸發器會消防3次),但它應該工作。 –

3

試試這個!

你可以使用一個旋轉操作

select * into newtab from [dbo].[Tab] 
pivot(
max(value) 
for varname in([var1],[var2],[var3]) 
)as piv;