#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
если бы он знал, как