私は2つのテーブルTable_1
とTable_2
を持っています。2つのSQLクエリを結合しますか?
このSQL文を使用して、Info_Data
の特定のデータが何回出現するかを、Table_1
にカウントします。現在のハードコード化された形で、それは、行を挿入し、データを更新しない場合、私はその後、行がTable_2
に存在するかどうかをチェックし、別のSQLステートメントを有する9
SELECT Staff_No, Info_Data, COUNT(*) cCount
FROM Staff_Manager.dbo.Staff_Time_TBL
WHERE Staff_No = 3201 AND Date_Data BETWEEN '2016/6/1' AND '2016/7/1' AND Info_Data = 'Data_1'
GROUP BY Staff_No, Info_Data
の値を返します。そうであれば、データを更新するだけです。
IF EXISTS (SELECT * FROM Staff_Manager.dbo.Staff_Count_TBL WHERE Staff_No = 3201 AND Year_D = 2016 AND Month_D = 6 AND Column_Index = 1)
BEGIN
UPDATE Staff_Manager.dbo.Staff_Count_TBL
SET Column_Value = 9
WHERE Staff_No = 3201 AND Year_D = 2016 AND Month_D = 6 AND Column_Index = 1
END
ELSE
BEGIN
INSERT INTO Staff_Manager.dbo.Staff_Count_TBL (Staff_No, Year_D, Month_D, Column_Index, Column_Value)
VALUES (3201, 2016, 6, 1, 9)
END
これらのステートメントは、どのように動作していますか。
しかし、私は2つのステートメントを組み合わせる方法を見つけることができませんでした。私はJOIN
、MERGE
を試してみました。 、これは明らかに間違ってい は、最初の文が返す値が9
あることなので、私はハードこのラインSET Column_Value = 9
に9
コード化された交換したいとColumn_Value
列は、最初の文
の結果と、このラインVALUES (3201, 2016, 6, 1, 9)
に9
価値私が何をしようとしているかを説明するためです。
IF EXISTS (SELECT * FROM Staff_Manager.dbo.Staff_Count_TBL WHERE Staff_No = 3201 AND Year_D = 2016 AND Month_D = 6 AND Column_Index = 1)
BEGIN
UPDATE Staff_Manager.dbo.Staff_Count_TBL
SET Column_Value = SELECT Staff_No, Info_Data, COUNT(*) cCount
FROM Staff_Manager.dbo.Staff_Time_TBL
WHERE Staff_No = 3201 AND Date_Data BETWEEN '2016/6/1' AND '2016/7/1' AND Info_Data = 'Data_1'
GROUP BY Staff_No, Info_Data
WHERE Staff_No = 3201 AND Year_D = 2016 AND Month_D = 6 AND Column_Index = 1
END
ELSE
BEGIN
INSERT INTO Staff_Manager.dbo.Staff_Count_TBL (Staff_No, Year_D, Month_D, Column_Index, Column_Value)
VALUES (3201, 2016, 6, 1, SELECT Staff_No, Info_Data, COUNT(*) cCount
FROM Staff_Manager.dbo.Staff_Time_TBL
WHERE Staff_No = 3201 AND Date_Data BETWEEN '2016/6/1' AND '2016/7/1' AND Info_Data = 'Data_1'
GROUP BY Staff_No, Info_Data)
END
ああ、私はあなたが何を意味するかを見ます。素晴らしい作品をありがとう。 – KyloRen