SQL 服务器 2014 查询
SQL Server 2014 queries
我有一个要求,我必须检查记录,如果两个值都存在记录,则标志设置为 0,如果只有一个值存在,则标志为 1。
例如:
ID Value
1 'Season16'
2 'Season16'
2 'Season15'
3 'Season15'
3 'Season15'
4 'Season16'
现在我要,
ID Flag
1 1
2 0
3 0
4 1
即如果 ID 同时具有第 16 季和第 15 季,则 Flag 为 0,否则为 1。
你们能说说你们的想法吗?
这对于您的 table 结构和可能的季节数非常具体,但这是一种方式:
select
Id,
case
when count(1) > 1 then 0
else 1
end Flag
from MyTable
group by Id
这是一个使用多个 CTE 的示例。前两个为每个特定原因构建表格。如果值列表中有两个季节,则最后的 select 将 return 所有设置了标志的 ID。
WITH CTE16 AS (SELECT * FROM @myTable WHERE Value = 'Season16'),
CTE15 AS (SELECT * FROM @myTable WHERE Value = 'Season15')
SELECT DISTINCT A.ID,
CASE WHEN B.Flag IS NULL THEN 1 ELSE 0 END [Flag]
FROM @myTable A LEFT OUTER JOIN (SELECT A.ID, 1 [Flag]
FROM CTE16 A INNER JOIN CTE15 B
ON A.ID = B.ID) B
ON A.ID = B.ID
使用 case when 语句。希望这会回答你的问题。你可以通过提供更多关于你的 table 的信息来帮助每个人。
Select
Value1, value2,
Case when value1 = value2 then 0 else 1 end as Flag
from Values_Table
我有一个要求,我必须检查记录,如果两个值都存在记录,则标志设置为 0,如果只有一个值存在,则标志为 1。
例如:
ID Value
1 'Season16'
2 'Season16'
2 'Season15'
3 'Season15'
3 'Season15'
4 'Season16'
现在我要,
ID Flag
1 1
2 0
3 0
4 1
即如果 ID 同时具有第 16 季和第 15 季,则 Flag 为 0,否则为 1。
你们能说说你们的想法吗?
这对于您的 table 结构和可能的季节数非常具体,但这是一种方式:
select
Id,
case
when count(1) > 1 then 0
else 1
end Flag
from MyTable
group by Id
这是一个使用多个 CTE 的示例。前两个为每个特定原因构建表格。如果值列表中有两个季节,则最后的 select 将 return 所有设置了标志的 ID。
WITH CTE16 AS (SELECT * FROM @myTable WHERE Value = 'Season16'),
CTE15 AS (SELECT * FROM @myTable WHERE Value = 'Season15')
SELECT DISTINCT A.ID,
CASE WHEN B.Flag IS NULL THEN 1 ELSE 0 END [Flag]
FROM @myTable A LEFT OUTER JOIN (SELECT A.ID, 1 [Flag]
FROM CTE16 A INNER JOIN CTE15 B
ON A.ID = B.ID) B
ON A.ID = B.ID
使用 case when 语句。希望这会回答你的问题。你可以通过提供更多关于你的 table 的信息来帮助每个人。
Select
Value1, value2,
Case when value1 = value2 then 0 else 1 end as Flag
from Values_Table