Помощь с SQL Server Join - PullRequest
       3

Помощь с SQL Server Join

1 голос
/ 29 августа 2011

Мне нужна некоторая помощь с объединением, которое я пытаюсь сделать в SQL Server, чтобы создать представление с разбивкой клиентов по штатам в моей базе данных.

Таблица 1:

CustomerID, Gender, CustomerType

Таблица 2:

CustomerID, State, City, Zipcode

Я хочу, чтобы представление в конце содержало следующее (пример):

ID| State | Males | Females | PlatinumCustomer | GoldCustomer | SilverCustomer
1    FL      200     300           40                 200           260  
2    MO      200     400           40                 300           360

Значения для моих Genders: M и F, для моих CustomerTypes - P, G и S. Спасибо за любую помощь, спасибо!

Ответы [ 2 ]

6 голосов
/ 29 августа 2011

Вот базовая сводная таблица, которая должна дать вам в основном то, что вам нужно.В вашем примере есть столбец ID, который нельзя напрямую воспроизвести из вашего набора данных.Это должно быть рассчитано.

SELECT 
  State,
  SUM(CASE WHEN Gender = 'M' THEN 1 ELSE 0 END) AS Males,
  SUM(CASE WHEN Gender = 'F' THEN 1 ELSE 0 END) AS Females,
  SUM(CASE WHEN CustomerType = 'P' THEN 1 ELSE 0 END) AS PlatinumCustomer,
  SUM(CASE WHEN CustomerType = 'G' THEN 1 ELSE 0 END) AS GoldCustomer,
  SUM(CASE WHEN CustomerType = 'S' THEN 1 ELSE 0 END) AS SilverCustomer
FROM Table1 JOIN Table2 ON Table1.CustomerID = Table2.CustomerID
GROUP BY State
1 голос
/ 29 августа 2011

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

With Table1 AS
(
    Select 1 as CustomerId, 'M' Gender, 'Platinum' as CustomerType
    UNION SELECT 2, 'M', 'Platinum'
    UNION SELECT 3, 'F', 'Gold'
    UNION SELECT 4, 'M', 'Gold'
    UNION SELECT 5, 'F', 'Gold'
    UNION SELECT 6, 'M', 'Silver'
    UNION SELECT 7, 'F', 'Silver'
    UNION SELECT 8, 'M', 'Silver'
    UNION SELECT 9, 'F', 'Silver'
),
Table2 AS
(
    SELECT 1 as CustomerId, 'FL' State, NULL City, NULL ZipCode
    UNION SELECT 2, 'MO' State, NULL City, NULL ZipCode
    UNION SELECT 3, 'MO' State, NULL City, NULL ZipCode
    UNION SELECT 4, 'FL' State, NULL City, NULL ZipCode
    UNION SELECT 5, 'FL' State, NULL City, NULL ZipCode
    UNION SELECT 6, 'FL' State, NULL City, NULL ZipCode
    UNION SELECT 7, 'MO' State, NULL City, NULL ZipCode
    UNION SELECT 8, 'MO' State, NULL City, NULL ZipCode
    UNION SELECT 9, 'MO' State, NULL City, NULL ZipCode
)
Select 
    Row_Number() Over (Order By State) Id,
    State, 
    Sum (Case When Gender = 'm' then 1 else 0 end) as Males,
    Sum (Case When Gender = 'f' then 1 else 0 end) as Females,
    Sum (Case When CustomerType = 'Platinum' then 1 else 0 end) as PlatinumCustomer,
    Sum (Case When CustomerType = 'Gold' then 1 else 0 end) as GoldCustomer,
    Sum (Case When CustomerType = 'Silver' then 1 else 0 end) as SilverCustomer
From Table1 
    Inner Join Table2 
    on Table1.CustomerId = Table2.CustomerId
Group By State
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...