2013-12-24 2 views
0

Я просто потерялся в этом. Кажется простым, но просто не могу ответить на этот вопрос. И у меня такое чувство, что я смущен ответом. Хорошо, вот оно. Я пытаюсь сделать это в WebMatrix 3.0, я верю в его SQL Express. Не уверен в этом.столбец суммы, основанный на значениях из другого столбца, группировка по третьему столбцу

Table Dlivry 

tID cID Boxes Delivered 
1  01  5  1 
2  03  7  1 
3  01  2  0 
4  01  3  1 
5  03  5  1 
6  05  4  1 
7  05  10  0 

, что я хочу

Client Delivered NotDelivered 
01  8   2 
03  12   0 
05  4   10 

Что я сделал до сих пор

SELECT D1.cid  AS Client, 
     Sum(D1.boxes) AS Delivered, 
     Sum(D2.boxes) AS NotDelivered 
FROM dlivr D1, 
     dlivry D2 
WHERE D1.delivered = 1 
     AND D2.delivered = 0 
     AND D1.cid = D2.cid 
GROUP BY cid 

Хорошо там. Я готов смутиться, и я готов учиться.

Цените свою помощь.

ответ

3

Поскольку вы используете внутреннее соединение, вы получите только строки для CID, у которых есть как доставленные, так и недоставленные коробки. Таким образом, вы не получите ни одной строки для CID = 3. Попробуйте следующее:

SELECT CID, 
     SUM(CASE WHEN Delivered = 1 THEN boxes ELSE 0 END) AS Delivered, 
     SUM(CASE WHEN Delivered = 0 THEN boxes ELSE 0 END) AS NotDelivered 
FROM Dlivr 
GROUP BY CID 
+0

Super !! Мне было интересно, варианты case хороши для SQL, что если это Oracle или mySQL. как будет выглядеть запрос в этом случае. – user3129015

+0

Я думаю, что это должно работать во всех системах SQL, это самый общий синтаксис. – Barmar

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