2013-10-21 22 views
5

Ho bisogno di una query che ordinare i dati dalla scheda e metterla in newtab, che assomiglia a questo:Selezione multipla nella query INSERT INTO

sto usando SQL Server 2008 R2 Express e ho provato il codice:

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') 
    ) 

Ma server restituisce ed errori:

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

Sono abbastanza nuovo di SQL e sarò grato se qualcuno mi aiuti con quello.

+0

Prova il seguente suggerimento: http://stackoverflow.com/questions/19107174/column-row-transpose-in-oracle-sql – michael

+0

Questo è come ho fatto la trasposizione. Fare riferimento al seguente collegamento http://stackoverflow.com/questions/19107174/column-row-transpose-in-oracle-sql – michael

risposta

4

Sembra che tu stia cercando di ruotare i dati. Ci sono altri modi per farlo (cioè utilizzando operatore PIVOT), ma immagino che l'utilizzo della vecchia scuola funzioni di aggregazione aiutano a ottenere una migliore idea di come i dati vengono elaborati:

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

Non sarà efficiente come potrebbe essere (nel tuo esempio, il trigger fuoco 3 volte), ma dovrebbe funzionare. –

3

Prova questa !!

si potrebbe utilizzare un operatore perno

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