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 次 |
最近记录: |