[英]Merge Rows in SQL Server 2008
我有一張如下表:
Customer |Type |Count Joe |Silver-S |1 Joe |Silver |7 Joe |Gold |3 Joe |Gold-S |2
我需要合並它,使它看起來如下所示:
Customer |Type |Count Joe |Silver |8 Joe |Gold |5
救命!
select Customer, [Type], SUM([Count]) from (
select Customer, replace([Type], '-S', '') [Type], [COUNT] from Customer
)
t
group by customer, [Type]
這是一個利用分區方法的解決方案:
SELECT DISTINCT Customer, REPLACE([Type], '-S', '') AS [Type],
SUM([Count]) OVER (PARTITION BY (SELECT REPLACE([Type], '-S', ''))) AS [Count]
FROM Customer
試試這個:
select
Customer,
left([Type],CHARINDEX('-', [type])),
sum(COUNT)
from Customers
group by
Customer,
left([Type],CHARINDEX('-', [type]));
或者這個://編輯:這可能會更慢
select
Customer,
replace([Type], '-S', ''),
sum(COUNT)
from Customers
group by
Customer,
replace([Type], '-S', '');
如果這是您的數據庫項目 - 您應該重新設計該數據庫並將該“-S”放在另一個字段中,或者避免將來出現這種情況。
select Customer,
case when Type like 'Silver%' then 'Silver'
when Type like 'Gold%' then 'Gold' end, sum(Count)
from table
group by Customer,
case when Type like 'Silver%' then 'Silver'
when Type like 'Gold%' then 'Gold' end
我認為在這種情況下使用cte要清楚得多。 我會做這樣的事情:
首先是測試數據:
DECLARE @tbl TABLE(Customer VARCHAR(100),[Type] VARCHAR(10),[Count] INT)
INSERT INTO @tbl
VALUES
('Joe','Silver-S',1),
('Joe','Silver',7),
('Joe','Gold',3),
('Joe','Gold-S',2)
查詢:
;WITH CTE AS
(
SELECT
tbl.Customer,
REPLACE(tbl.[Type],'-S','') AS [Type],
tbl.[Count]
FROM
@tbl AS tbl
)
SELECT
CTE.Customer,
CTE.[Type],
SUM(cte.[Count]) AS [Count]
FROM
CTE
GROUP BY
CTE.Customer,
CTE.[Type]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.