5

我需要一个查询来对 Tab 中的数据进行排序并将其放入 NewTab,如下所示:

我正在使用 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')
    )

但是服务器正在返回并出现错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

我对 SQL 很陌生,如果有人帮助我,我将不胜感激。

4

2 回答 2

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
于 2013-10-21T09:29:16.067 回答
3

试试这个 !!

您可以使用枢轴运算符

select * into newtab  from [dbo].[Tab]
pivot(
max(value)
for varname in([var1],[var2],[var3])
)as piv;
于 2013-10-21T09:42:33.963 回答