SQL查找T1.ColumnA与T2.ColumnA,如果T1.ColumnA中的所有5个值都列在T2.ColumnA中,则将T1.ColumnA替换为";“全部”;
我正在尝试执行特定值的查找。如果区域的Table1的所有值都列为查找表(Table2)的一部分,则将Table1.Region字段替换为value='all',基本上尝试对所有5个区域进行分组,并在列出所有5个区域时(根据查找表中的值),在未列出所有区域时用“all”替换该值,保留地区代码SQL查找T1.ColumnA与T2.ColumnA,如果T1.ColumnA中的所有5个值都列在T2.ColumnA中,则将T1.ColumnA替换为";“全部”;,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试执行特定值的查找。如果区域的Table1的所有值都列为查找表(Table2)的一部分,则将Table1.Region字段替换为value='all',基本上尝试对所有5个区域进行分组,并在列出所有5个区域时(根据查找表中的值),在未列出所有区域时用“all”替换该值,保留地区代码 Year Region Value 2012 A1 24 2012 B2 24 2012 C3 24 2012 D4 24 2012
Year Region Value
2012 A1 24
2012 B2 24
2012 C3 24
2012 D4 24
2012 E5 24
2012 A1 36
2012 B2 36
2012 C3 36
2012 D4 36
2012 E5 36
2013 A1 24
2013 B2 24
Lookup Table
Region Value
1 A1
2 B2
3 C3
4 D4
5 E5
期望的结果
Year Region Term
2012 ALL 24 <-- Note region change to all because there are 5 regions per above
2012 ALL 36 <-- Note region change to all because there are 5 regions per above
2013 A1 24 <-- Region did not change because there were only 2 regions in source
2013 B2 24 <-- Region did not change because there were only 2 regions in source
年份区域术语
2012年全部24小时有一个小技巧:
(@var为NULL或表1.Region=@var)
您需要将“ALL”转换为null,因此当选择“ALL”时,它会取消筛选
我想你要么在使用SSR,要么在上面的下拉列表中,但这里有一个链接:
您没有指定正在使用的RDBMS,但您应该能够在所有数据库产品中使用以下内容:
select distinct t1.year,
case
when t2.year is null and t2.value is null
then t1.region
else 'ALL' End Region,
t1.value
from table1 t1
left join
(
select year, value
from table1
group by year, value
having count(distinct region) = (select count(distinct value)
from table2)
) t2
on t1.year = t2.year
and t1.value = t2.value
请参见将此查询与和运算符一起使用
SELECT t1.Year, CASE WHEN o.Value IS NULL THEN 'ALL' ELSE t1.Region END AS Region,
t1.Value
FROM dbo.test7 t1 OUTER APPLY (
SELECT Value
FROM test8
EXCEPT
SELECT Region
FROM test7 t2
WHERE t1.Year = t2.Year
AND t1.Value = t2.Value
) o
GROUP BY t1.Year, CASE WHEN o.Value IS NULL THEN 'ALL' ELSE t1.Region END,
t1.Value
演示欢迎使用堆栈溢出!您正在使用什么RDBMS?我正在使用SSMS2008,只是想通过SQL查询来实现。我有多个查找要合并到所有