Chr*_*tos 5 sql sql-server group-by max sql-server-2012
我有一个sql视图,让我们调用它SampleView,其结果具有以下格式.
Id (INT), NameA (VARVHAR(50)), NameB (VARCHAR(50)), ValueA (INT), ValueB (INT)
Run Code Online (Sandbox Code Playgroud)
视图的结果集包含可能具有相同Id或不相同的行.如果有两个或多个具有相同Id的行,我希望得到类似以下内容的内容
SELECT
Id,
MAX(NameA),
MAX(NameB),
MAX(ValueA),
MAX(ValueB)
FROM SampleView
GROUP BY Id
ORDER BY Id
Run Code Online (Sandbox Code Playgroud)
关于列Id,ValueA并ValueB没有任何问题.另一方面,MAX用于两者NameA和NameB事情并不像预期的那样.经过一些谷歌搜索和搜索后,我意识到这MAX不是字母数字列的"预期"行为.说出预期,我的意思是MAX在我的情况下使用,它将返回NameA最大字符数的值,MAX(LEN(NameA)).我在这里要提到的是,没有任何可能为相同长度NameA的相同值设置两个值Id.这可能会使问题更容易解决.
我使用SQL Server 2012和TSQL.
您对我如何处理这个问题有任何建议吗?
非常感谢您提前寻求帮助.
您可以使用窗口函数:
SELECT DISTINCT
id,
FIRST_VALUE(NameA) OVER (PARTITION BY id
ORDER BY len(NameA) DESC) AS MaxNameA,
MAX(ValueA) OVER (PARTITION BY id) AS MaxValueA,
FIRST_VALUE(NameB) OVER (PARTITION BY id
ORDER BY len(NameB) DESC) AS MaxNameB,
MAX(ValueB) OVER (PARTITION BY id) AS MaxValueB
FROM SampleView
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |