Sql 组合具有重复id的多行
我的表是odb.OPMdata 列=id、要素、预算、月份 我要它做什么 此示例sql查询未显示Id为='1'的所有行,仅显示其最大值和最小值Sql 组合具有重复id的多行,sql,sql-server,Sql,Sql Server,我的表是odb.OPMdata 列=id、要素、预算、月份 我要它做什么 此示例sql查询未显示Id为='1'的所有行,仅显示其最大值和最小值 SELECT month, MAX(budgetmonth) AS value1, MAX(actual) AS value2, MAX(variance) AS value3, MIN(budgetmonth) AS value4, MIN(actual) AS value5, MIN(variance) AS value6 FROM O
SELECT month, MAX(budgetmonth) AS value1, MAX(actual) AS value2, MAX(variance) AS value3,
MIN(budgetmonth) AS value4, MIN(actual) AS value5, MIN(variance) AS value6
FROM OPMdata
GROUP BY month
我的问题是如何将三个或更多重复行合并到一行中,并且值将显示在每列中
我想实现的就是这个
id | value1 | value2 | value3 | value4 |value5| value 6 | value7 | value8 |val9
1 | CC | 100 | january | FF | 100 |february | DD | 200 |mar
对于具有相同id的其他行,依此类推。
请在此方面提供帮助,并提前感谢。您可以尝试像此+月表这样的三重连接,以便正确订购:
;WITH months AS ( -- Table with months for ordering
SELECT DATENAME(month,'1970-01-01') as [month], 1 as [level]
UNION ALL
SELECT DATENAME(month,DATEADD(month,[level],'1970-01-01')), [Level]+1
FROM months
WHERE [level] < 12
)
, results AS ( --Temp cte with add of ROW_NUMBERS()
SELECT id,
element,
budget,
o.[month],
ROW_NUMBER() OVER (PARTITION BY Id ORDER BY m.[level]) as rn
FROM OPMdata o
LEFT JOIN months m
ON m.[month] = o.[month]
)
--Final query:
SELECT TOP 1 WITH TIES
r.id,
r.element,
r.budget,
r.[month],
r1.element,
r1.budget,
r1.[month],
r2.element,
r2.budget,
r2.[month]
FROM results r
LEFT JOIN results r1
ON r.id = r1.id and r.rn = r1.rn-1
LEFT JOIN results r2
ON r1.id = r2.id and r1.rn = r2.rn-1
ORDER BY r.rn
编辑:
如果要创建视图,可以使用以下查询:
CREATE VIEW ViewNameHere
AS
WITH months AS ( -- Table with months for ordering
SELECT DATENAME(month,'1970-01-01') as [month], 1 as [level]
UNION ALL
SELECT DATENAME(month,DATEADD(month,[level],'1970-01-01')), [Level]+1
FROM months
WHERE [level] < 12
)
, results AS ( --Temp cte with add of ROW_NUMBERS()
SELECT id,
element,
budget,
o.[month],
ROW_NUMBER() OVER (PARTITION BY Id ORDER BY m.[level]) as rn
FROM OPMdata o
LEFT JOIN months m
ON m.[month] = o.[month]
)
--Final query:
--every column with unique name 'value*'
SELECT TOP 1 WITH TIES
r.id as value1,
r.element as value2,
r.budget as value3,
r.[month] as value4,
r1.element as value5,
r1.budget as value6,
r1.[month] as value7,
r2.element as value8,
r2.budget as value9,
r2.[month] as value10,
FROM results r
LEFT JOIN results r1
ON r.id = r1.id and r.rn = r1.rn-1
LEFT JOIN results r2
ON r1.id = r2.id and r1.rn = r2.rn-1
ORDER BY r.rn
有多少个可能的重复项?请添加OPMdata表中的数据样本。@sagi每个id的重复项可能为12个,因此您需要36列?是的,google-SQL Server pivot多个列,您将有大量答案,@gofr1我已经测试过它及其作品。谢谢你的出色查询。我使用sql研究运行你的查询。它给了我一个错误。错误如下:无法在网格窗格和图表窗格中表示SQL文本。我想您正在尝试创建视图。我说的对吗?是的@gofr1,因为我需要将其放入ASP并绑定到GridViews。您必须首先用唯一的名称命名每一列。当使用cte SSMS无法显示窗格时,必须忽略此警告,视图仍将创建。
CREATE VIEW ViewNameHere
AS
WITH months AS ( -- Table with months for ordering
SELECT DATENAME(month,'1970-01-01') as [month], 1 as [level]
UNION ALL
SELECT DATENAME(month,DATEADD(month,[level],'1970-01-01')), [Level]+1
FROM months
WHERE [level] < 12
)
, results AS ( --Temp cte with add of ROW_NUMBERS()
SELECT id,
element,
budget,
o.[month],
ROW_NUMBER() OVER (PARTITION BY Id ORDER BY m.[level]) as rn
FROM OPMdata o
LEFT JOIN months m
ON m.[month] = o.[month]
)
--Final query:
--every column with unique name 'value*'
SELECT TOP 1 WITH TIES
r.id as value1,
r.element as value2,
r.budget as value3,
r.[month] as value4,
r1.element as value5,
r1.budget as value6,
r1.[month] as value7,
r2.element as value8,
r2.budget as value9,
r2.[month] as value10,
FROM results r
LEFT JOIN results r1
ON r.id = r1.id and r.rn = r1.rn-1
LEFT JOIN results r2
ON r1.id = r2.id and r1.rn = r2.rn-1
ORDER BY r.rn