2015-06-22 4 views
1

Относительно моих предыдущих Question. С этими изменениями в таблицах: (*) используются для обозначения изменений в таблицах.Столбцы PIVOT в SQL Server с их SUM

Продукты Таблица

prod_ID - int 
prod_Name - varchar(100) 
prod_Code - varchar(100) 
*prod_Price- float 

Заказы Таблица

ord_ID - int 
ord_Qty - int 
prod_ID - int 
cus_ID - float 
*ord_PurchaseType - varchar(100) 

Учитывая, что все элементы оцениваются в 10 долларов каждый. Я хочу, чтобы окончательный отчет был примерно таким.

enter image description here

В настоящее время я использую что-то вроде этого: SUM(CASE WHEN ord_PurchaseType = 'cash' THEN prod_Price ELSE 0 END), чтобы получить данные, он работает, когда я бегу не внутри SET @query = N' ... запроса. Кроме того, у него есть ошибка, говорящая, что у него есть недопустимый столбец с именем наличными. Я также попытался положить слово наличными в переменной , но он по-прежнему производит ту же ошибку.

+0

У вас есть данные для справки? – HJK

+0

@HJK У меня есть образцы данных из [Здесь] (http://stackoverflow.com/questions/30912571/joining-tables-and-left-join-as-new-columns-in-tsql/30913094?noredirect=1# comment49981685_30913094) – Chloe

+0

i din просмотреть любые данные о денежных средствах из приведенного вами примера. у вас есть наличные деньги в таблице продуктов? – HJK

ответ

2

Хорошо это один был немного более сложным, но здание на нашем последнем ответе. Разница с тем, что вы хотите сделать здесь, по существу, составляет 2 разных значения в одном отчете. Суммируя количество продуктов, а также суммируя денежные выплаты. Вы не можете сделать все это в одном сводном заявлении, но вы можете сделать это отдельно, а затем объединить их.

См SQL Fiddle

Так вот вы видите нашу оригинальную Pivot на вершине которой был обернут в общей таблице Expression (КТР) называется ProductQuantities. Затем мы добавили новый CTE для платежей, которые вы заметите, имеют немного другую группу, поскольку нас интересуют только наличные платежи Клиентом. Наконец, мы объединяем результаты обоих запросов вместе с клиентом, чтобы получить наш окончательный набор результатов.

SET @query = N'WITH ProductQuantities As (
SELECT cus_Name,'+ @colsForSelect +' 
FROM ( 
    Select cus_Name, prod_Name, SUM(ord_Qty) as sum_ord_Qty 
    from Orders o 
    inner join Customers c on c.cus_ID = o.cus_ID 
    inner join Products p on p.prod_ID = o.Prod_ID 
    GROUP BY cus_Name, prod_Name 
) p 
PIVOT (MAX([sum_ord_Qty]) FOR prod_Name IN ('+ @colsForPivot +')) 
AS pvt), 

CustomerPayments As (
Select cus_Name, SUM(Case When ord_PurchaseType = ''cash'' then p.prod_Price * o.[ord_Qty] else 0 End) as [Cash Payments] 
    from Orders o 
    inner join Customers c on c.cus_ID = o.cus_ID 
    inner join Products p on p.prod_ID = o.Prod_ID 
    GROUP BY cus_Name 
) 

Select pq.*, cp.[Cash Payments] 
FROM ProductQuantities pq 
INNER JOIN CustomerPayments cp on pq.cus_Name = cp.cus_Name' 
+0

спасибо @sarin, мне удалось создать большинство моих отчетов с этим. – Chloe

+0

С удовольствием. любые вопросы, дайте мне знать. – sarin

+0

Это было так долго, но есть ли способ использовать ваш запрос в представлении? – Chloe

Смежные вопросы