如何避免空值......
表1
ID Value1 Value2
001 Rajan null
001 Vijayan null
001 null ravi
001 null sudeep
002 kumar null
002 null venkat
.....
我不想显示空值。
预期产出
ID Value1 Value2
001 Rajan ravi
001 Vijayan sudeep
002 kumar venkat
.....
如何查询上述条件
需要查询帮助
答案 0 :(得分:3)
除非您更详细地解释Value1
和Value2
列中的这些值是如何组合在一起的,并且只有“匹配”确实是确定性的,否则您可以执行以下操作:
DECLARE @temp TABLE (ID INT, Value1 VARCHAR(20), Value2 VARCHAR(20))
INSERT INTO @temp
(ID, Value1, Value2)
VALUES
(1, 'Rajan', NULL),
(3, 'Vijayan', NULL),
(1, NULL, 'Ravi'),
(3, NULL, 'sudeep'),
(2, 'kumar', NULL),
(2, NULL, 'venkat')
SELECT DISTINCT
ID,
(SELECT Value1 FROM @temp t2 WHERE t2.ID = t.ID AND Value1 IS NOT NULL) AS 'Value1',
(SELECT Value2 FROM @temp t2 WHERE t2.ID = t.ID AND Value2 IS NOT NULL) AS 'Value2'
FROM
@temp t
这会为ID
的每个值提供一行,Value1
的非NULL值和Value2
的非空值。
但正如你现在的问题所在,这种方法不起作用,因为你有相同ID的多个条目 - 而且没有解释如何将两个单独的值匹配在一起....
因此,就目前情况而言,我会说你的问题没有确定性和适当的解决方案。您需要提供更多信息,以便我们为您找到解决方案。
更新:如果您要更新到SQL Server 2005 或更新版本,您可以执行类似两个嵌套CTE的操作 - 但在这种情况下,您也必须为如何定义一些规则/排序,将ID = 001
的两个变体连接在一起.....
类似的东西:
DECLARE @temp TABLE (ID INT, Value1 VARCHAR(20), Value2 VARCHAR(20))
INSERT INTO @temp
(ID, Value1, Value2)
VALUES
(1, 'Rajan', NULL),
(1, 'Vijayan', NULL),
(1, NULL, 'Ravi'),
(1, NULL, 'sudeep'),
(2, 'kumar', NULL),
(2, NULL, 'venkat')
;WITH Value1CTE AS
(
SELECT ID, Value1,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Value1) AS 'RowNum'
FROM @temp
WHERE Value1 IS NOT NULL
),
Value2CTE AS
(
SELECT ID, Value2,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Value2) AS 'RowNum'
FROM @temp
WHERE Value2 IS NOT NULL
)
SELECT
v1.ID,
v1.Value1, v2.Value2
FROM
Value1CTE v1
INNER JOIN
Value2CTE v2 ON v1.ID = v2.ID AND v1.RowNum = v2.RowNum
会给你一个可重现的输出:
ID Value1 Value2
1 Rajan Ravi
1 Vijayan sudeep
2 kumar venkat
假设给定两个带有 SAME ID的条目,您希望对ORDER BY
的实际值进行排序(例如Rajan
Vijayan
}和Ravi
之前的sudeep
- >您将Rajan
和Ravi
加在一起,以及Vijayan
和sudeep
)
但是又一次:这是在 SQL Server 2005 而且只是更新 - 在SQL Server 2000中没有等效的,不可原谅的......
答案 1 :(得分:0)
SELECT i1.ID, i2.Value1, i3.Value2
FROM Table1 i1, Table1 i2, Table1 i3
WHERE i1.ID = i2.ID and i1.ID = i3.ID and i2.Value1 IS NOT NULL and i3.Value2 IS NOT NULL;