2014-02-01 2 views
0

У меня 2 таблицы: Contents и PacksSQL Server рассчитывать определенное значение поля

В Content столбцов так:

Id Name   IsPerishable  IsSpecial  IsDanger 
---------------------------------------------------------- 
1  Paper   False   False   False 
3  Fruit   True    False   False 
5  NewsPaper  False   True   False 
6  Radioactive  False   False   True 
7  Foods   True    False   False 

В Packs столбцов так:

Id  From  To  ContentId 
--------------------------------------- 
1  ABZ   ATL  3 
2  ANU   ATL  5 
3  BAQ   ATL  7 
4  BTS   BAQ  6 
5  FRL   BAQ  5 

Теперь я хочу получить результат, который группирует каждое «Кому», затем показывает отдельное значение IsPerishable/IsSpecial/IsDanger

так:

To  Perishable  Special  Danger 
----------------------------------------------- 
ATL  2    1    0 
BAQ  0    1    1 

Я пытаюсь использовать некоторые запрос, но ни один из них не работал правильно:

select Name, 
    case 
     when IsSpecial = 1 then count(IsSpecial) 
     when IsPerishable = 1 then count(IsPerishable) 
     when IsDanger = 1 then count(IsDanger) 
    end as 'Content' 
from Contents 
group by IsSpecial , IsPerishable , IsDanger 

select  To,count(DISTINCt Id) as 'Count' 
FROM   Packs 
GROUP BY  To 

ответ

0

попробовать этот

Select To, 
    (Select count(*) from Content c where c.Id= p.Id and c.IsSpecial=1) as Special, 
    (Select count(*) from Content c where c.Id= p.Id and c.Isperishable=1) as Perishable, 
    (Select count(*) from Content c where c.Id= p.Id and c.Isperishable=1) as Danger 
from 
pack p 
group by To 
0
SELECT P.To, SUM(Perishable), SUM(Special),SUM(Danger) FROM 
(
SELECT Id, 
CASE IsPerishable WHEN true THEN 1 ELSE 0 END AS Perishable, 
CASE IsSpecial WHEN true then 1 ELSE 0 END AS Special, 
CASE IsDanger WHEN true then 1 ELSE 0 END AS Danger 
FROM Contents 
) C 
Right Join Packs P 
on P.ContentId=C.Id 
Group BY P.to 
+0

Это делается с использованием только 1 внутренний запрос и использует встроенные скалярные функции SQL во внешнем запросе – DhruvJoshi

+0

Эта работа тоже. – BaHaR

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