Fal*_*nos 6 sql t-sql sql-server null distinct
我有一个包含下面列的表,如果COD重复,我需要获取值,在VALUE列上获取非NULL.如果不重复,则可以获得NULL VALUE.像例子一样:
我正在使用SQL SERVER.
这就是我得到的:
COD ID VALUE
28 1 NULL
28 2 Supermarket
29 1 NULL
29 2 School
29 3 NULL
30 1 NULL
Run Code Online (Sandbox Code Playgroud)
这就是我要的:
COD ID VALUE
28 2 Supermarket
29 2 School
30 1 NULL
Run Code Online (Sandbox Code Playgroud)
我正在尝试做什么:
;with A as (
(select DISTINCT COD,ID,VALUE from CodId where ID = 2)
UNION
(select DISTINCT COD,ID,NULL from CodId where ID != 2)
)select * from A order by COD
Run Code Online (Sandbox Code Playgroud)
你可以试试这个.
DECLARE @T TABLE (COD INT, ID INT, VALUE VARCHAR(20))
INSERT INTO @T
VALUES(28, 1, NULL),
(28, 2 ,'Supermarket'),
(29, 1 ,NULL),
(29, 2 ,'School'),
(29, 3 ,NULL),
(30, 1 ,NULL)
;WITH CTE AS (
SELECT *, RN= ROW_NUMBER() OVER (PARTITION BY COD ORDER BY VALUE DESC) FROM @T
)
SELECT COD, ID ,VALUE FROM CTE
WHERE RN = 1
Run Code Online (Sandbox Code Playgroud)
结果:
COD ID VALUE
----------- ----------- --------------------
28 2 Supermarket
29 2 School
30 1 NULL
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用该WITH TIES条款Row_Number()
例
Select top 1 with ties *
from YourTable
Order By Row_Number() over (Partition By [COD] order by Value Desc)
Run Code Online (Sandbox Code Playgroud)
返回
COD ID VALUE
28 2 Supermarket
29 2 School
30 1 NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |