需要在SQL中返回一个临时表,使用DISTINCT和ORDER子句连接另一个临时表。
我有一个声明的表,它返回一些东西。
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 现在,我有了一个不同的表,我想在其中插入,并且过程返回该表作为最终结果。
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子句
我认为
ORDER BY
gi.CityCodeOrNAME
WHEN 'City' THEN City
ELSE CityCode ASC
END 哪个似乎不起作用?我需要区分,因为它可能破坏了其他一些逻辑。
Select * from @CurrencyTable发布于 2016-12-02 03:21:24
您可以始终使用group by而不是select distinct。这将解决你的问题:
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中的使用。
发布于 2016-12-02 02:56:30
ORDER BY CASE WHEN CityCodeOrNAME = 'City'
THEN City
ELSE CityCode
END如果你需要不同的订单,你也可以把它们分开
ORDER BY CASE WHEN CityCodeOrNAME = 'City' THEN City END DESC,
CASE WHEN CityCodeOrNAME <> 'City' THEN CityCode END ASChttps://stackoverflow.com/questions/40923911
复制相似问题