我有一個表像下面這樣:行合併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
幫助!
我有一個表像下面這樣:行合併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,
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
select Customer, [Type], SUM([Count]) from (
select Customer, replace([Type], '-S', '') [Type], [COUNT] from Customer
)
t
group by customer, [Type]
太棒了 - 完美的工作!謝謝! – AshesToAshes 2012-02-25 20:50:48
試試這個:
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」放在另一個字段中,或避免將來出現這種情況。
我喜歡這個答案最好的,因爲它不依賴於特定的子字符串S或主要值金/銀。但請將其與您的其他答案結合起來(或刪除您的其他答案)。 – 2012-02-19 15:49:05
答案合併。 – Kamil 2012-02-19 16:18:57
我認爲在這種情況下使用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]
下面是一個使用分區的辦法解決:
SELECT DISTINCT Customer, REPLACE([Type], '-S', '') AS [Type],
SUM([Count]) OVER (PARTITION BY (SELECT REPLACE([Type], '-S', ''))) AS [Count]
FROM Customer
黃金和黃金有什麼區別?你是否有很多類似的模式,即銅牌,銅牌。你想要的是一個按操作標準的組,但你可能需要一些字符串操作或一個case語句來標準化類型字段 – Sparky 2012-02-19 13:04:44
謝謝,但正如我在下面提到的,Phil的答案是正確的。這個答案意味着對於每種類型的方案都有一個S的模式(例如X和X-S)。 – AshesToAshes 2012-09-29 09:48:48