1

私は3つのテーブルを持っています..

House1 House2 results

    house1
    ID,  Name,  Monday,  Tuesday
     1   john     1         1
     2   jack     1         0

    House2
    ID,  Name,  Monday,  Tuesday
     3   Dan      0         0
     1   John     1         0

results次のように、テーブルを埋めたいと思います。

    results
    ID,  Name,  Total
    1    john     3
    2    jack     1
    3    dan      0

私は IIF() を使用して日数を数えます..しかし、次の
ようなものを使用して重複した行が作成されました。

INSERT INTO results (ID, name, total)
SELECT ID, name, IIf([house1.monday]>0,1,0)+
                 IIf([house2.monday]>0,1,0)+
                 IIf([house1.tuesday]>0,1,0)+
                 IIF([house2.tuesday]>0,1,0) as TOTAL
FROM house1,house2
WHERE House1.ID = House2.ID

のデータのみを挿入するため、明らかに機能しませんjohn

4

3 に答える 3

0

のようなものはどうですか

SELECT ID, Name, SUM(Monday)+SUM(Tuesday) as Total
FROM
(
SELECT ID, Name, Monday, Tuesday
FROM House1
Union ALL
SELECT ID, Name, Monday, Tuesday
FROM House2
) a
Group BY a.ID, a.Name
于 2013-07-23T14:14:48.713 に答える
0

これを試して:

INSERT INTO results
SELECT Id, Name, SUM(Monday) + SUM (Tuesday)
FROM (
SELECT Id, Name, Monday, Tuesday FROM house1
UNION
SELECT Id, Name, Monday, Tuesday FROM house2)
group by Id;

http://www.compileonline.com/execute_sql_online.phpにアクセスして、次のコードを試すことができます。

BEGIN TRANSACTION;

DROP TABLE IF EXISTS House1;
DROP TABLE IF EXISTS House2;
DROP TABLE IF EXISTS results;

CREATE TABLE House1(Id integer PRIMARY KEY, Name text, Monday integer,  Tuesday integer);
CREATE TABLE House2(Id integer PRIMARY KEY, Name text, Monday integer,  Tuesday integer);
CREATE TABLE results(Id integer PRIMARY KEY, Name text, Total integer);

INSERT INTO House1 VALUES(1,'john', 1, 1);
INSERT INTO House1 VALUES(2,'jack', 1, 0);
INSERT INTO House2 VALUES(3,'Dan', 0, 0);
INSERT INTO House2 VALUES(1,'john', 1, 0);
COMMIT;

INSERT INTO results
SELECT Id, Name, SUM(Monday) + SUM (Tuesday)
FROM (
SELECT Id, Name, Monday, Tuesday FROM house1
UNION
SELECT Id, Name, Monday, Tuesday FROM house2)
GROUP BY Id;

SELECT * FROM results;
于 2013-07-23T14:33:55.967 に答える
0

あなたはクエリの問題を認識しています。内部結合は、一致する行のみを保持します。

代わりに使用することで、すべての行を保持できますunion alltotal以下は、各テーブルの を計算し、aggregationそれらを合計するために使用します。

INSERT INTO results(ID, name, total)
    SELECT ID, name, SUM(Total) as TOTAL
    FROM ((select h1.id, IIf([h1.monday]>0,1,0) + IIf([h1.tuesday]>0,1,0) as Total
           from house1 h1
          ) union all
          (select h2.id, IIf([h2.monday]>0,1,0) + IIf([h2.tuesday]>0,1,0) as Total
           from house2 h2
          )
         ) h
    group by id, name;

編集

コメントの質問を変更しました。ただし、サブクエリで必要な列を定義して、同じことを行うだけです。

INSERT INTO results(ID, name, totalMonday, totalTuesday, total)
    SELECT ID, name, SUM(Monday), SUM(Tuesday), SUM(Monday)+Sum(Tuesday) as TOTAL
    FROM ((select h1.id, IIf([h1.monday]>0,1,0) as Monday, IIf([h1.tuesday]>0,1,0) as Tuesday
           from house1 h1
          ) union all
          (select h2.id, IIf([h2.monday]>0,1,0) as Monday, IIf([h2.tuesday]>0,1,0) as Tuesday
           from house2 h2
          )
         ) h
    group by id, name;
于 2013-07-23T14:27:05.520 に答える