2012-04-10 16 views
0

このテーブルをクエリする時間が約8-12分で、2回クエリを実行すると時間がかかりすぎるため、テーブルを1回クエリします。内部結果と外部結果を識別するフラグがテーブルにあります。私は、これは1つの結果ストリームのフィルタを使用して1つのテーブルを2回クエリします。

...今、その2つの別々のクエリを接合..列の和このフラグは内部にあるBの&和列Bの和このフラグが外部にある& & C Dを望ん最初のクエリ

Select 
CONVERT(varchar(10), right([week_name],10), 111) as DatePeriod --weekly 
,[Group] as [Group] 
,SUM([columnA]) as [columnA_int] 
,SUM([columnB]) as [columnB_int]  
from myTbl 
where internal_external = 'internal' 
group by 
CONVERT(varchar(10), right([week_name],10), 111),[Group] 

2番目のクエリ

Select 
CONVERT(varchar(10), right([week_name],10), 111) as DatePeriod --weekly 
,[Group] as [Group] 
,SUM([columnB]) as [columnB_ext] 
,SUM([columnC]) as [columnC_ext] 
,SUM([columnC]) as [columnC_ext]   
from myTbl 
where internal_external = 'external' 
group by 
CONVERT(varchar(10), right([week_name],10), 111),[Group] 

ので、理想的にクエリのすべての5列と一度だけDBを打つの例。

+0

をごDISTICTを使用して、ORとのwheresを組み合わせることはできません理由があります? – Maess

+0

申し訳ありませんが、私のSQLスキルはかなり初心者です。 – CAR

答えて

3

このようにそれを試してみてください。

SELECT 
    internal_external 
    ,CONVERT(varchar(10), right([week_name],10), 111) as DatePeriod --weekly 
    ,[Group] as [Group] 
    ,SUM(CASE 
      WHEN internal_external='internal' THEN [columnA] 
      ELSE 0 
      END) as [columnA_int] 
    ,SUM([columnB]) as [columnB_intext] 
    ,SUM(CASE 
      WHEN internal_external='external' THEN [columnC] 
      ELSE 0 
      END) as [columnC_ext] 
    ,SUM(CASE 
      WHEN internal_external='external' THEN [columnC] 
      ELSE 0 
      END) as [columnC_ext2] 
FROM myTbl 
GROUP BY 
    internal_external 
    ,CONVERT(varchar(10), right([week_name],10), 111) 
    ,[Group] 
-- use the next lines if there are other values for internal_external 
HAVING 
    internal_external IN('internal', 'external') 

それとも、あなたはinternal_external列見送るする場合:

SELECT 
    CONVERT(varchar(10), right([week_name],10), 111) as DatePeriod --weekly 
    ,[Group] as [Group] 
    ,SUM(CASE 
      WHEN internal_external='internal' THEN [columnA] 
      ELSE 0 
      END) as [columnA_int] 
    ,SUM(CASE 
      WHEN internal_external='internal' THEN [columnB] 
      ELSE 0 
      END) as [columnB_int] 
    ,SUM(CASE 
      WHEN internal_external='external' THEN [columnB] 
      ELSE 0 
      END) as [columnB_ext] 
    ,SUM(CASE 
      WHEN internal_external='external' THEN [columnC] 
      ELSE 0 
      END) as [columnC_ext] 
FROM myTbl 
GROUP BY 
    internal_external 
    ,CONVERT(varchar(10), right([week_name],10), 111) 
    ,[Group] 
-- use the next lines if there are other values for internal_external 
HAVING 
    internal_external IN('internal', 'external') 
+0

columnAの合計に外部値が含まれないようにするためですか? columnAの内部と外部の値があります。私は1つのセットだけを必要とし、カラムBもint/extを持っています。希望は意味をなさない。 – CAR

+0

フックケー、ハングアップ.. – RBarryYoung

+0

が変更されました。列があなたのように配置されていない場合は、詳細に説明する必要があります。 2つのサンプルクエリのように行数が異なるため(列数と型が一致する必要があるため)、行えません。 – RBarryYoung