SQL Различить столбец с условиями - PullRequest
0 голосов
/ 14 марта 2019

Я работаю над запросом, в котором мне нужно подсчитать отдельную строку CarId, когда столбец LocationId не равен нулю, и получить все CarId, если его null или 0, но запрос, который я пыталсяразличает все CarId, даже если его нуль

@LocId int

    Select Count(distinct a.CarId) from VehicleDetails a 
        inner join VehicleDocuments b on a.DocId=b.DocId
        left join VehicleShipmentDetails dpg on dpg.VehicleShipmentId= b.VehicleShipmentId
        where b.LogicalDelete=0 and a.LogicalDelete=0 
        and (dpg.LocationId= @LocId or dpg.LocationId= 0 or dpg.LocationId is null)



|  ID  |    CarId       |    LocationId   |  DateCreated  |
|------+----------------+-----------------+---------------|
|   1  |       1        |        5        |   02/03/2019  |
|   2  |       2        |      null       |   01/14/2019  |
|   3  |       2        |        0        |   02/03/2019  |
|   4  |       2        |        5        |   12/30/2018  |
|   5  |       4        |        3        |   01/10/2019  |
|   6  |       3        |        5        |   02/14/2019  |
|   7  |       2        |        5        |   03/13/2019  |

Желаемый выход:

|  ID  |    CarId       |    LocationId   |  DateCreated  |
+------+----------------+-----------------+---------------+
|   1  |       1        |        5        |   02/03/2019  |
|   2  |       2        |      null       |   01/14/2019  |
|   3  |       2        |        0        |   02/03/2019  |
|   4  |       2        |        5        |   03/13/2019  |
|   5  |       4        |        3        |   01/10/2019  |
|   6  |       3        |        5        |   02/14/2019  |

Токовый выход

|  ID  |    CarId       |    LocationId   |  DateCreated  |
+------+----------------+-----------------+---------------+
|   1  |       1        |        5        |   02/03/2019  |
|   2  |       2        |        5        |   01/14/2019  |
|   3  |       4        |        3        |   01/10/2019  |
|   4  |       3        |        5        |   02/14/2019  |

Я получаю счет 4но мне нужно было 6 в качестве счетчика

РЕДАКТИРОВАТЬ: Моя цель состоит в том, чтобы удалить строку в Distinct CarId, если значение LocationId равно Null или 0, но на моемТекущий код, он различает все CarId, которые null, 0 и равны @LocId

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

В SQL вы можете использовать оператор CASE для управления условиями (точно так же, как «if then else» в других языках программирования). В вашем случае эта функция может помочь, потому что у вас есть два разных случая для обработки.

0 голосов
/ 14 марта 2019

Вы можете запросить что-то вроде этого, заменив your_table на свой фактический набор данных.

SELECT ID, CardId, LocationId, DateCreated
FROM your_table as T
WHERE NOT EXISTS (SELECT *
                  FROM your_table as T1
                  WHERE T.ID > T1.ID AND T.CarID = T1.CarID)
...