首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果使用distinct,则逐项顺序必须显示在选择列表中。

如果使用distinct,则逐项顺序必须显示在选择列表中。
EN

Stack Overflow用户
提问于 2016-12-02 02:47:57
回答 2查看 73关注 0票数 2

需要在SQL中返回一个临时表,使用DISTINCT和ORDER子句连接另一个临时表。

我有一个声明的表,它返回一些东西。

代码语言:javascript
复制
Declare @GrpItems TABLE (ID INT,
                         Name NVARCHAR(32),
                         Date DATETIME,
                         City NVARCHAR(32),
                         CityCode NVARCHAR(8),
                         CurrencySort NVARCHAR(16)   
                        )

INSERT INTO @GrpItems 
    SELECT  
        ID, Name, Date ,
        CityCodeorCaption   --this can be two type based on User input  CityCode or CityCaption 
    FROM
        RepeatItemTable 

现在,我有了一个不同的表,我想在其中插入,并且过程返回该表作为最终结果。

代码语言:javascript
复制
DECLARE @CurrencyTable TABLE (RowNumber INT Identity (1,1),
                              FK_Currency INT,
                              Value INT,
                              CityCode NVARCHAR(16),
                              CityCaption NVARCHAR(16)
                             )

INSERT INTO @Currency 
    SELECT DISTINCT 
        gb.FK_Currency, cv.Value,
        c.CityCode, c.CityCaption
    FROM 
        Balance b
    JOIN 
        Currency c ON c.PK_Currency = b.FK_Currency
    JOIN 
        @GrpItems gi ON c.FK_Grpitem = gi.PK_Grpitem
    ORDER BY 
        gi.CityCodeorName    

我知道需要分组的某个地方,但是我不确定,或者在where过滤器中有一个select子句

我认为

代码语言:javascript
复制
ORDER BY 
   gi.CityCodeOrNAME 
        WHEN 'City' THEN City 
        ELSE CityCode ASC 
        END     

哪个似乎不起作用?我需要区分,因为它可能破坏了其他一些逻辑。

代码语言:javascript
复制
Select * from @CurrencyTable
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 03:21:24

您可以始终使用group by而不是select distinct。这将解决你的问题:

代码语言:javascript
复制
SELECT gb.FK_Currency, cv.Value, c.CityCode, c.CityCaption
FROM Balance b JOIN
     Currency c
     ON c.PK_Currency = b.FK_Currency JOIN
     @GrpItems gi
     ON c.FK_Grpitem = gi.PK_Grpitem
GROUP BY gb.FK_Currency, cv.Value, c.CityCode, c.CityCaption
ORDER BY MAX(gi.CityCodeorName) ;

注意聚合函数在ORDER BY中的使用。

票数 1
EN

Stack Overflow用户

发布于 2016-12-02 02:56:30

代码语言:javascript
复制
ORDER BY CASE WHEN CityCodeOrNAME = 'City' 
              THEN City
              ELSE CityCode 
         END

如果你需要不同的订单,你也可以把它们分开

代码语言:javascript
复制
ORDER BY CASE WHEN CityCodeOrNAME = 'City' THEN City END DESC,
         CASE WHEN CityCodeOrNAME <> 'City' THEN CityCode END ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40923911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档