簡體   English   中英

合並SQL Server 2008中的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM