Больше проблем с SQL - PullRequest
       4

Больше проблем с SQL

0 голосов
/ 08 декабря 2010

Мне просто нужен общий совет. Мои таблицы структурированы так (точнее, таблицы, с которыми мне было поручено работать):

> Deliveries 
 ID (Primary Key) 
 customer
...(irrelevant fields)...


> DeliveryItems
ID (primary key)
deliveryid (links to ID of deliveries)
delivered (integer - 2 means delivered, 1 not delivered yet)
...(irrelevant fields)...

В любом случае, в создаваемом запросе SQL мне нужно сделать следующее:

Пользователь заходит на страницу, которая является параметром клиента для поставок, поэтому на нем отображаются все доставки, связанные с этим клиентом. Затем мне понадобится динамически сгенерированный столбец, чтобы отобразить, все ли мои товары были доставлены или нет - так что, в принципе, если количество товаров для этой партии товара равно количеству товаров для этой партии, которые имеют статус '2 равны, все предметы для этой доставки были доставлены. Есть идеи? Я играл с соединениями, но я в замешательстве: (

Спасибо

Ответы [ 4 ]

3 голосов
/ 08 декабря 2010
select d.*,
    case when di.TotalCount = DeliveredCount then 1 else 0 end as DeliveryComplete
from Deliveries d
inner join (
    select deliveryID, 
        count(*) TotalCount, 
        count(case when delivered = 2 then 1 end) as DeliveredCount
    from DeliveryItems 
    group by deliveryID
) di on d.ID = di.deliveryID
1 голос
/ 08 декабря 2010

Вы можете получить небольшую помощь от case / when / then:

select d.*, 
case 
   when exists (select * from DeliveryItems di 
                where di.deliveryid = d.id 
                and di.delivered <> 2)
   then 0
   else 1 
end as DeliveryComplete
from Deliveries d
where d.customer = @customerId
0 голосов
/ 08 декабря 2010

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

SELECT b.*
    , CASE WHEN a.min_delivered = 1 THEN 'Get back to work'
           ELSE 'All done!'
           END AS [Are they all done]
FROM
(
    SELECT customer
        , MIN(delivered) AS min_delivered
    FROM Deliveries a
    JOIN DeliveryItems b
        ON a.id = b.deliveryid
    WHERE a.customer = @customer
    GROUP BY customer
) a
JOIN Deliveries b
    ON a.customer = b.customer
0 голосов
/ 08 декабря 2010

Пример дела:

SELECT 
    DeliveryId, 
    CASE 
        WHEN SUM(Delivered) = 2 * COUNT(Id) THEN 'All items delivered'
        ELSE 'Not Delivered'
    END AS [Status]
FROM 
    DeliveryItems
GROUP BY 
    DeliveryId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...