2017-05-11 8 views
0

私は両方のテンポラリテーブルに参加したいが、それは多くの重複データを返すので、テーブルに参加する前に得られる結果は です。ここでSQLの後にデータが返される

enter image description here

私は両方のテーブルに結果を結合した後で、画像

enter image description here

以下のように、それはすべてのデータを倍増しています。

私は両方のテーブルに参加するためにこのSQLを使用します。

`  SELECT * FROM(
      SELECT DISTINCT t1.hatch_num AS hatch_num_1,t1.delay_code AS delay_code_1,t1.st_time + '-' + t1.ed_time AS time_1 
      FROM #temp1 t1 
     )as a 

     CROSS JOIN 
     (
      SELECT DISTINCT t2.hatch_num AS hatch_num_2,t2.delay_code AS delay_code_2,t2.st_time + '-' + t2.ed_time AS time_2 
      FROM #temp2 t2 
     )as b` 

内部結合を使用しようとしましたが、同じ結果が返されました。

ここは#temp1テーブルのsqlです。実行すると正しいデータが返されます。

 SELECT DISTINCT t1.scn,CONVERT(DATE,t2.opr_st_dt_tm) as work_date,t2.hatch_num, 
    t3.delay_code,REPLACE(CONVERT(varchar(5),t3.delay_st_dt_tm,108),':','')[time_start], 
    REPLACE(CONVERT(varchar(5),t3.delay_ed_dt_tm,108),':','')[time_end] 
    FROM ccostallysheet t1 
    INNER JOIN ccostsitem t2 ON t2.master_id = t1.id 
    INNER JOIN ccostsdelayitem t3 ON t3.master_id = t1.id 
    WHERE t2.hatch_num = 'H1' AND t2.hatch_num IS NOT NULL 
    GROUP BY t1.scn,t2.opr_st_dt_tm,t2.hatch_num,t3.delay_code,t3.delay_st_dt_tm,t3.delay_ed_dt_tm 

、ここでTEMP2のSQLを作成し、重複する結果なしの両方のテーブルを結合する方法

SELECT DISTINCT t1.scn,CONVERT(DATE,t2.opr_st_dt_tm)as work_date,t2.hatch_num, 
t3.delay_code,REPLACE(CONVERT(varchar(5),t3.delay_st_dt_tm,108),':','')[time_start], 
REPLACE(CONVERT(varchar(5),t3.delay_ed_dt_tm,108),':','')[time_end] 
FROM ccostallysheet t1 
INNER JOIN ccostsitem t2 ON t2.master_id = t1.id 
INNER JOIN ccostsdelayitem t3 ON t3.master_id = t1.id 
WHERE t2.hatch_num = 'H2' AND t2.hatch_num IS NOT NULL 
GROUP BY t1.scn,t2.opr_st_dt_tm,t2.hatch_num,t3.delay_code,t3.delay_st_dt_tm,t3.delay_ed_dt_tm 

ですか?

+0

あなたは#temp1と#temp2の両方のデータを提供できます – Leo

+0

'SELECT DISTINCT'と' GROUP BY' ...とGROUP BY'を組み合わせても集計関数はありません...どうしてですか? – jarlh

答えて

1

あなたは何かにテーブルを一緒に参加させる必要があります。あなたが取得している正確に何をし、それが行うように設計されたものだ

SELECT * FROM(
      SELECT DISTINCT t1.hatch_num AS hatch_num_1,t1.delay_code AS delay_code_1,t1.st_time + '-' + t1.ed_time AS time_1 
      FROM #temp1 t1 
     )as a 

     INNER JOIN 
     (
      SELECT DISTINCT t2.hatch_num AS hatch_num_2,t2.delay_code AS delay_code_2,t2.st_time + '-' + t2.ed_time AS time_2 
      FROM #temp2 t2 
     )as b ON a.delay_code_1 = b.delay_code_2 
0

CROSS JOIN:このようなので、私は、遅延コードを推測しています。一方、INNER JOINはいくつかのデータだけを返すべきですが、何を返すべきかを教えていないので、CROSS JOINのように動作しています。 SimonはINNER JOINに何を返すかを伝える方法の例を教えました。ONに続いて結合条件を使用する必要があります。あなたが提供した情報が十分でないため、あなたの場合に参加条件がどのようになるか分かりません。あなた自身でそれを理解するか、2つのテーブルと期待される結果についてもっと詳しく説明しなければなりません。助けます。しかし、あなたの説明から、あなたが探しているものはおそらくUNIONであり、JOINではないと感じています。これを試してみてください:

SELECT t1.hatch_num, t1.delay_code, t1.st_time + '-' + t1.ed_time AS time 
FROM #temp1 t1 

UNION 

SELECT t2.hatch_num, t2.delay_code, t2.st_time + '-' + t2.ed_time AS time 
FROM #temp2 t2 

注:UNIONはあなたのために自動的にそれを行うので、あなたは、ここにDISTINCTを使用する必要はありません。

関連する問題