1

特定の値のルックアップを実行しようとしています。Region の Table1 のすべての値がルックアップ テーブル (Table2) の一部としてリストされている場合は、Table1.Region フィールドを value = 'ALL' に置き換えます。 5 つの地域がリストされています (ルックアップ テーブルの値に従って) すべての地域がリストされていない場合は、地域コードを保持します

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

データをグループ化する方法は知っていますが、グループ化されたデータをさらに統合して ALL に置き換える必要があります

方向性をありがとう!

カルロス

4

3 に答える 3

0

このクエリをAPPLY AND EXCEPT演算子と共に使用します

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 

SQLFiddle のデモ

于 2013-02-26T22:54:03.027 に答える
0

使用している 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

デモで SQL Fiddle を参照してください

于 2013-02-26T22:03:35.947 に答える
0

これにはちょっとしたコツがあります:

(@var IS NULL OR Table1.Region = @var)

「ALL」をヌルに変換する必要があるため、「ALL」を選択するとフィルターがキャンセルされます。

SSRSを使用しているか、この上のドロップダウンを使用していると思いますが、リンクは次のとおりです。

https://www.simple-talk.com/content/print.aspx?article=835#hr2

于 2013-02-26T21:38:56.757 に答える