Sql server SQL Server查询拆分表
不确定它如何调用,我需要这样做:Sql server SQL Server查询拆分表,sql-server,Sql Server,不确定它如何调用,我需要这样做: +---------------+ | param | value | | 1 | 3 | | 1 | 3 | | 2 | 4 | | 2 | 4 | +-------+-------+ 到 +-----------------+ | param1 | param2 | | 3 | 4 | | 3 | 4 | +-------+---------+ 没有内
+---------------+
| param | value |
| 1 | 3 |
| 1 | 3 |
| 2 | 4 |
| 2 | 4 |
+-------+-------+
到
+-----------------+
| param1 | param2 |
| 3 | 4 |
| 3 | 4 |
+-------+---------+
没有内部联接
是否可能
我的错误在哪里
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))
这应该起作用:
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 '+@colNames+'
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY param ORDER BY param) n
FROM tbl
) t
PIVOT
(
MIN(value) FOR param IN ('+@cols+')
) pvt'
EXEC(@sql)
这里是
此方法使用动态枢轴。为了获得预期结果,使用了带分区的ROW_NUMBER()
,因为param
列中的值不是唯一的
更新
您也可以这样尝试,但必须手动向查询中添加列:
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
如果不希望自动处理列,可以使用静态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
这应该起作用:
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 '+@colNames+'
FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY param ORDER BY param) n
FROM tbl
) t
PIVOT
(
MIN(value) FOR param IN ('+@cols+')
) pvt'
EXEC(@sql)
这里是
此方法使用动态枢轴。为了获得预期结果,使用了带分区的ROW_NUMBER()
,因为param
列中的值不是唯一的
更新
您也可以这样尝试,但必须手动向查询中添加列:
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
如果不希望自动处理列,可以使用静态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
有没有办法不自动这么做?:)我想在其中使用“从参数为1的tbl中选择值”和“从参数为2的tbl中选择值”query@user840250我更新了我的答案,也许这会满足您的需要。有没有办法不自动执行此操作?:)我想在其中使用“从参数为1的tbl中选择值”和“从参数为2的tbl中选择值”query@user840250我更新了我的答案,也许这会适合你的需要。