在sqlserver中的列之间应用条件

时间:2017-02-15 10:04:01

标签: sql-server

Primary    Secondary
-----------------------------------
UST         MUN
Data        NULL
Tele        Data
Sun         Data
RMDS        Data
Data        NULL
Mor         NULL
UST         NULL
Data        Bridge

我想检查" Secondary"的价值。已经在"主要"那应该是"主要"但如果它不在"主要"价值必须来自"中学"仅限列。

我希望输出为:

Primary  Secondary
------  -----------
UST      MUN
Data     Bridge
Tele
Sun
RMDS
Mor

2 个答案:

答案 0 :(得分:1)

UNION(而不是UNION ALL)将返回您需要的所有不同值:

SELECT Primary
FROM MyTable

UNION

SELECT Secondary
FROM MyTable
WHERE Secondary IS NOT NULL

答案 1 :(得分:0)

由于您没有组合因子,因此无法在一个输出中输出两行。数据库如何知道UST - MUN应该在同一行而不是UST - Bridge

你可以在两个不同的输出中获得它并围绕它构建你的编程逻辑。

对于第一行,你可以这样做:

SELECT * FROM 
(
SELECT t1.`primary` FROM tableName t1 
UNION
SELECT t1.`primary` FROM tableName t1 
INNER JOIN tableName t2 ON t1.primary = t2.`secondry`
) AS test1

第二,你可以这样做:

SELECT DISTINCT t2.`secondry` FROM tableName t1 
RIGHT JOIN tableName t2 ON t1.primary = t2.`secondry` 
WHERE  t1.primary IS  NULL AND t2.secondry IS NOT NULL