【问题标题】:SQL server Select Distinct with Order BySQL server 选择 Distinct with Order By
【发布时间】:2019-07-19 09:21:53
【问题描述】:

我对数据库查询不是很了解,但遇到错误

"如果 SELECT DISTINCT 是,ORDER BY 项目必须出现在选择列表中 指定。”

使用以下查询。我在谷歌上搜索,如果使用 Distinct 但仍然无法获得它,则发现该订单需要分组。谁能帮帮我。

SELECT DISTINCT 
       P1.*
FROM T_PRD P1
     LEFT JOIN T_PRD P2 ON P1.baseprdid = P2.prdid
     INNER JOIN T_PRD_NM_VENDOR prdNmVendor ON P1.prdId = prdNmVendor.prdId
     INNER JOIN T_VENDOR_NM vendorNM ON prdNmVendor.vendorNMId = vendorNM.vendorNMId
     INNER JOIN T_NM nm ON vendorNM.NMId = nm.NMId
     INNER JOIN T_PRD_VENDOR prdVendor ON prdVendor.PRDId = P1.PRDId
     INNER JOIN T_VENDOR vendor ON prdVendor.vendorId = vendor.vendorId
     INNER JOIN T_CSTMR_PRD_REF custPrd ON custPrd.ProductId = P1.PRDId
     INNER JOIN T_CSTMR cstmr ON custPrd.ChennelCstrId = cstmr.cstmrid
WHERE 1 = 1
      AND P1.Lifecycle = 2
      AND P1.AutoCreated = 0
      AND vendor.vendorId = 1
      AND P1.VendorEnfId = 1
      AND cstmr.cstmrid = 2008
ORDER BY CASE
             WHEN P1.BASEPRDID = 0
             THEN P1.PRDNAME
             ELSE P2.PRDNAME
         END ASC, 
         BASEPRDID;

【问题讨论】:

  • 在SELECT部分​​添加P2.PRDNAME和BASEPRDID后可以试试吗?
  • 你的 DBMS 是什么 ..?
  • 微软 Sql 服务器

标签: sql sql-order-by case distinct


【解决方案1】:

您的 ORDER BY 取决于 SELECT DISTINCT list 中缺少的表达式。添加它

 SELECT DISTINCT  P1.*
        ,CASE
             WHEN P1.BASEPRDID = 0
             THEN P1.PRDNAME
             ELSE P2.PRDNAME
         END col

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多