gpt4 book ai didi

SQL Server Select Distinct 和 Order By with CASE

转载 作者:行者123 更新时间:2023-12-04 14:57:37 25 4
gpt4 key购买 nike

我已经看到很多关于这种情况的问题/论坛帖子,但我要么不理解解决方案,要么提供的解决方案针对该特定问题过于具体,我不知道如何将其应用于我的情况。我有以下查询:

SELECT DISTINCT d.*
FROM Data d
JOIN Customers c
ON c.Customer_Name = d.Customer_Name
AND c.subMarket = d.subMarket
JOIN Sort s
ON s.Market = c.Market
ORDER BY d.Customer_Name, d.Category, d.Tab, d.SubMarket,
CASE s.sortBy
WHEN 'Comp_Rank'
THEN d.Comp_Rank
WHEN 'Market_Rank'
THEN d.Market_Rank
ELSE d.Other_Rank
END

我在我的 MySQL 数据库上使用了那个确切的查询,它工作得很好。我们最近切换到 SQL Server 数据库,现在它不起作用,我收到错误消息:
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

我尝试将 s.* 添加到 SELECT (因为 s.sortBy 在 CASE 中)并且没有改变任何东西,我还尝试列出 Data 中的每个字段并在 SELECT 中进行排序,结果完全相同错误。

Data 中实际上没有重复项,但是当我进行连接时,它会为每个项目生成 4 个完全重复的行,我不知道如何解决这个问题,所以这就是我最初添加 DISTINCT.我尝试了 LEFT JOIN、INNER JOIN 等的变体……但没有得到不同的结果。无论如何,任何一个问题的解决方案都可以,但我假设需要更多信息来找出 JOIN 重复问题。

编辑:我刚刚意识到我错误地输入了 ORDER BY 中的一些字段(例如,n.Category、n.Tab 应该是 d.Category、d.Tab)。 ORDER BY 中的所有内容都来自我从中选择 * 的数据表。正如我所说,我还尝试列出 SELECT 中的每个字段,但没有帮助。

最佳答案

正如错误所暗示的那样,当您使用 select distinct 时, 你必须按 select 中的表达式排序条款。那么,您的 case是一个问题以及不是来自 d 的所有列.

您可以使用 group by 解决此问题取而代之,并包括您想要排序的列。因为案例包括来自 s 的一列,您需要包含 case (或至少该列)在 group by :

SELECT d.*
FROM Data d JOIN
Customers c
ON c.Customer_Name = d.Customer_Name AND
c.subMarket = d.subMarket JOIN Sort s
ON s.Market = c.Market
GROUP BY "d.*",
(CASE s.sortBy WHEN 'Comp_Rank' THEN d.Comp_Rank
WHEN 'Market_Rank' THEN d.Market_Rank
ELSE d.Other_Rank
END)
ORDER BY d.Customer_Name, d.Category, d.Tab, d.SubMarket,
(CASE s.sortBy WHEN 'Comp_Rank' THEN d.Comp_Rank
WHEN 'Market_Rank' THEN d.Market_Rank
ELSE d.Other_Rank
END)

请注意 "d.*"是引号。您需要列出 group by 中的所有列.

关于SQL Server Select Distinct 和 Order By with CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com