2015-05-21 7 views
1

Привет У меня есть SQL-скрипт и попробуйте добавить дополнительную колонку с разными условиями, но не могу заставить ее работать.Дополнительная колонка с различными условиями

Select 
PUB_Name As 'Pub Name' 
,SUM(PUB_Collected) AS Collected 
,Sum(PUB_Loyalty) As SumLoyalty 
,(CASE WHEN SUM(PUB_Collected)>0 THEN (SUM(PUB_Loyalty)/SUM(PUB_Collected))ELSE NULL END) AS 'Percentage' 
,SUM(PUB_Lodged_To_Till) As SumLodged 
,Sum(PUB_Paid_Out) As SumPaidOut 
,SUM(PUB_Lodged_To_Till) - Sum(PUB_Paid_Out) As 'Profit/Lose' 
,SUM(PUB_Lodged_To_Till) - SUM(PUB_Paid_Out) - SUM(PUB_Loyalty) As 'Profit/Lose + Loyalty' 
FROM [MattPubsDB].[dbo].[PUBRecords] 
WHERE PUB_Date >= '2015-03-01'AND PUB_Date < '2015-06-01' 
Group By PUB_Name 

Я хочу, чтобы получить эту колонку:

,SUM(PUB_Lodged_To_Till) - SUM(PUB_Paid_Out) - SUM(PUB_Loyalty) As 'Profit/Lose + Loyalty 2nd' 

с различались ГДЕ:

WHERE PUB_Date >= '2015-01-01'AND PUB_Date < '2015-06-01' 

буду благодарен за любую помощь, как я только начать изучать SQL.

ответ

0

Вам придется использовать условную агрегацию, и это повлияет на все ваши агрегации. Запрос будет выглядеть следующим образом:

Select PUB_Name As `Pub Name`, 
     SUM(CASE WHEN PUB_Date >= '2015-03-01'AND PUB_Date < '2015-06-01' THEn PUB_Collected ELSE 0 END) AS Collected, 
     . . . 
     SUM(CASE WHEN PUB_Date >= '2015-01-01'AND PUB_Date < '2015-06-01' 
       THEN COALESCE(PUB_Lodged_To_Till, 0) - COALESCE(PUB_Paid_Out, 0) - COALESCE(PUB_Loyalty, 0) 
       ELSE 0 
      END) As `Profit/Lose + Loyalty 2nd` 

FROM [MattPubsDB].[dbo].[PUBRecords] 
Group By PUB_Name; 

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

+0

Я пытался использовать этот код, но он все еще не решает проблему. Вы помещаете только один столбец с именем «Прибыль/Ложь + Лояльность 2», но вы не ставите первый столбец с разными условиями. Когда я копировал строку с «Profit/Lose + Loyalty 2nd» и менял название столбца и диапазон дат, у меня есть ошибка «Неправильный синтаксис рядом с« SUM ». – Hateusz

+0

Извините, моя ошибка. Я забыл поставить «,». Можете ли вы дать мне знать, как сортировать строку с процентом, поскольку есть уже один CASE. – Hateusz

+0

@Hateusz. , , Вы можете использовать 'order by ', где псевдоним определен в 'SELECT'. –