【问题标题】:SQL Distinct a column with conditionsSQL 用条件区分列
【发布时间】:2019-08-05 02:38:52
【问题描述】:

我正在处理一个查询,当LocationId 列不为空时,我需要计算不同的CarId 行,如果它的null0 不为空,则获取所有CarId,但我尝试过的查询区分所有 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 作为计数

编辑:如果LocationId 的值为Null0,我的目标是将行删除到Distinct CarId,但在我的当前代码中,它区分所有为null,@ 的CarId 987654337@ 等于@LocId

【问题讨论】:

  • 您的查询返回一列,但您的结果有四列...
  • 当前输出是我得到@jarlh的计数和值
  • 显示匹配的查询和结果数据!!!
  • @jarlh 我的目标是如果 LocationId 的值为 Null 或 0 但在我的当前代码中将行删除到 Distinct ID 但在我的当前代码中,它区分所有为 null、0 且等于 LocId 的 CarId

标签: mysql sql database select distinct


【解决方案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 中,您可以使用 CASE 语句来管理条件(就像其他编程语言中的“if then else”一样)。在您的情况下,此功能可能会有所帮助,因为您需要处理两种不同的情况。

    【讨论】:

    • 您能进一步解释如何做到这一点吗?如果 OP 知道如何,他可能已经使用了CASE
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2019-08-18
    相关资源
    最近更新 更多