SQL查找T1.ColumnA与T2.ColumnA,如果T1.ColumnA中的所有5个值都列在T2.ColumnA中,则将T1.ColumnA替换为";“全部”;

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

我正在尝试执行特定值的查找。如果区域的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    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查询来实现。我有多个查找要合并到所有