【问题标题】:SQL Distinct DuplicatesSQL 不同的重复项
【发布时间】:2015-10-28 11:03:16
【问题描述】:

我确信这是一个简单的问题,我发誓我搜索了论坛但没有任何帮助。我有一个我想要不同的 SYS.Name0 的 SQL 查询:

SELECT DISTINCT SYS.Name0 As 'PC Name', PR.Name0 AS 'Printer Name'
FROM v_R_System SYS
INNER JOIN v_GS_PRINTER_DEVICE PR
ON SYS.ResourceID = PR.ResourceID
WHERE SYS.AD_Site_Name0 = 'Texas'

即使使用 DISTINCT,我也会得到重复的 SYS.Name0(PC 名称)。

搜索论坛,然后我添加了GROUP BY SYS.Name0

然后我得到错误:

列“v_GS_PRINTER_DEVICE.Name0”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

任何帮助将不胜感激

【问题讨论】:

  • 您应该通过显示结果来指定重复的含义。尝试选择其他列并检查。
  • 您使用的是哪个 DBMS?
  • 通过返回唯一记录区分和分组。不是唯一的列。如果您想要 PC 名称列表,那么您也不能返回打印机名称;或者您必须将所有打印机名称连接在一起,例如 group_concat 在 mySQL 中会这样做;或返回最小或最大打印机...

标签: sql duplicates distinct


【解决方案1】:

如果你想要其他列,你应该使用group by。然后您必须决定如何处理另一列,例如:

SELECT SYS.Name0 As PC_Name, MAX(PR.Name0) AS Printer_Name
FROM v_R_System SYS INNER JOIN
     v_GS_PRINTER_DEVICE PR
     ON SYS.ResourceID = PR.ResourceID
WHERE SYS.AD_Site_Name0 = 'Texas'
GROUP BY SYS.Name0;

注意:我建议您不要在列名中使用单引号。使用为您的数据库定义的分隔符,可能是双引号、方括号或反引号。

【讨论】:

  • 做到了,将 MAX 放在 PR.Name0 前面,感谢单引号提醒!
【解决方案2】:

包括列以按结果分组:

SELECT DISTINCT SYS.Name0 AS 'PC Name', PR.Name0 AS 'Printer Name'
FROM            v_R_System AS SYS INNER JOIN
                         v_GS_PRINTER_DEVICE AS PR ON SYS.ResourceID = PR.ResourceID
WHERE        (SYS.AD_Site_Name0 = 'Texas')
GROUP BY SYS.Name0, PR.Name0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-04
    • 2021-12-03
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多