1

2つのクエリの和集合から選択しようとしています。2つのクエリの和集合は、たとえば90,000レコードになりますが、それらの合計を選択すると、たとえば89,800レコードになります。したがって、合計はレコードの量を減らしています。

Select Site,building,..., 
SUM(PhysicalCount) as PhysicalResult
From(
    Select Site,building,...,
    Count(TagID) as PhysicalCount 
    FROM Physical
    Where <SomeCondition1>
    Union
    Select Site,building,...,
    Count(TagID) as PhysicalCount 
    FROM Physical
    Where <SomeCondition2>
) T1
Group by Site,building,...,
4

3 に答える 3

2

はい、期待どおりに違いが見られるはずです。
例を挙げてください。groupbyを実行した後、合計行数が内部ユニオンクエリで取得する行数よりも少ない理由がわかります。たとえば、これは内部クエリ出力です。

site1、building1、....、15
site1、building1、.....、16

内部クエリでUNIONを使用しますが、カウントが異なるため、これら2つの行は異なります。
ただし、外部クエリでGROUP BYを使用すると、サイトごとにグループ化、建物、.....
これらの2つの行が1つになり、カウントは31になります。

于 2013-03-24T08:25:20.287 に答える
2

それはあなたが期待することです。

この簡単な例を作成します。

CREATE TABLE #X 
(
[Id] VARCHAR(100),
[Amount] INT
)
INSERT INTO #X VALUES
('michaeljackson',10),
('jim',20),
('jill',20),
('j',30)

CREATE TABLE #Y 
(
[Id] VARCHAR(100),
[Amount] INT
)
INSERT INTO #Y VALUES
('michaeljackson',100),
('jim',200),
('jill',200),
('j',300)

今これを実行してみてください:

SELECT * FROM #X
UNION
SELECT * FROM #Y

次に、スクリプトのモデルである次を実行します。

SELECT  x.Id,
    SUM(x.Amount) AS "Aggregate"
FROM 
    (
    SELECT * FROM #X
    UNION
    SELECT * FROM #Y
    ) x
GROUP BY x.Id

UNION一緒に編集されているスクリプトの金額を集計しませんUNION。一方のレコードセットをもう一方のレコードセットに追加し、重複を削除するだけです。一方を他方に追加して重複を保持したい場合は、UNION ALL

于 2013-03-24T10:13:13.577 に答える
2

countまず、サブクエリにに対応するがないため、クエリは意味がありませんgroup by。これはエラーを返すはずです。

グループの合計が必要であるが、グループを集計しない場合は、代わりにウィンドウ関数を使用します。

Select Site,building,..., 
       SUM(PhysicalCount) over (partition by site, building) as PhysicalResult
From(
    Select Site,building,...,
    Count(TagID) as PhysicalCount 
    FROM Physical
    Where <SomeCondition1>
    group by site, building
    Union
    Select Site,building,...,
    Count(TagID) as PhysicalCount 
    FROM Physical
    Where <SomeCondition2>
    group by site, building
    ) T1

重複を削除しますがunion、明らかに、カウントが異なるサイトと建物の組み合わせがあります。

おそらくあなたの意図は実際にこれを行うことです:

    Select Site, building, Count(TagID) as PhysicalCount 
    FROM Physical
    Where (<SomeCondition1>) or (<someCondition2)
    group by site, building;
于 2013-03-24T13:25:02.960 に答える