SQL различает столбец с условиями

#mysql #sql #database #select #distinct

#mysql #sql #База данных #выберите #различное

Вопрос:

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

 @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 или null , но в моем текущем коде он различает все идентификаторы carId, которые являются 0 ,,, и равны @LocId

Комментарии:

1. Ваш запрос возвращает один столбец, но ваш результат состоит из четырех столбцов…

2. Текущий результат — это количество и значения, которые я получаю @jarlh

3. Покажите нам совпадающие данные запроса и результата!!!

4. @jarlh Моя цель — удалить строку с отличным идентификатором, если значение LocationID равно нулю или 0, но в моем текущем коде он различает все carId, которые равны нулю, 0 и равны LocID

Ответ №1:

Вы можете запросить что-то вроде этого, заменить 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)
  

Ответ №2:

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

Комментарии:

1. Можете ли вы подробнее объяснить, как это сделать? Возможно, OP уже использовал, CASE если бы он знал, как