Строки слияния в SQL Server 2008 - PullRequest
3 голосов
/ 19 февраля 2012

У меня есть таблица, подобная приведенной ниже:

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

Справка!

Ответы [ 5 ]

3 голосов
/ 19 февраля 2012
select Customer, [Type], SUM([Count]) from (
    select Customer, replace([Type], '-S', '') [Type], [COUNT] from Customer
)
t
group by customer, [Type]
2 голосов
/ 26 сентября 2012

Вот решение с использованием подхода разбиения:

SELECT DISTINCT Customer, REPLACE([Type], '-S', '') AS [Type], 
SUM([Count]) OVER (PARTITION BY (SELECT REPLACE([Type], '-S', ''))) AS [Count]
FROM Customer
1 голос
/ 19 февраля 2012

Попробуйте это:

select 
    Customer, 
    left([Type],CHARINDEX('-', [type])), 
    sum(COUNT) 

from Customers

group by 
    Customer, 
    left([Type],CHARINDEX('-', [type]));

Или это: // edit: это может быть медленнее

    select 
        Customer, 
        replace([Type], '-S', ''), 
        sum(COUNT) 

    from Customers

    group by 
        Customer, 
        replace([Type], '-S', '');

Если это ваш проект базы данных - вы должны перепроектировать эту базу данных и поставитьчто "-S" в другом поле, или избегайте подобных ситуаций в будущем.

0 голосов
/ 20 февраля 2012

Я думаю, что в этом случае гораздо удобнее использовать 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]
0 голосов
/ 19 февраля 2012
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...