2017-10-21 28 views
0

「削除済み」としてマークすることができる建物のさまざまな種類の「資産」を格納するプログラムがあります。タイプ別に資産の数をカウントするクエリを作成し、まだ存在すると識別されたアイテムの数をカウントするクエリを作成することができます。しかし、私がしたいことは、2つを1つのテーブルに結合することです。SQL Server:クエリ結果の結合

クエリ1

SELECT 
    theAssetOutletType, COUNT(id) AS TotalNoOfAssets 
FROM 
    dbo.tblLEGAssets 
WHERE 
    buildingID = 1 
GROUP BY 
    theAssetOutletType 

クエリ

SELECT 
    theAssetOutletType, COUNT(id) AS ItemsStillPresent 
FROM    
    dbo.tblLEGAssets 
WHERE 
    buildingID = 1 AND removed <> 0 
GROUP BY 
    theAssetOutletType 

2は、任意の助けを事前に

答えて

0

試し連合ありがとう:

SELECT theAssetOutletType, count(id) as TotalNoOfAssets FROM dbo.tblLEGAssets where buildingID=1 group by theAssetOutletType 

UNION 

SELECT theAssetOutletType, count(id) as ItemsStillPresent FROM dbo.tblLEGAssets where buildingID=1 and removed<> 0 group by theAssetOutletType 
+0

あなたは労働組合を使用する場合は、行の種類ごとにフラグを追加する必要があり、ALLROWSとしてFE 1、0 –

+0

おかげNotRemoved行として:コードの使用を解決する同様の問題を必要とする他の誰かを願っています情報 - ただし、それはTotalNoOfAssetsを生成するように見えます。まだ存在しません。( –

+0

通常、最初のクエリのフィールド名は、後続のクエリがフィールド名に何を持っているかにかかわらず使用されます。 – Wranorn

1

私は条件付き凝集を示唆している:

SELECT theAssetOutletType, 
     COUNT(*) as TotalNoOfAssets 
     SUM(CASE WHEN removed <> 0 THEN 1 ELSE 0 END) as ItemsStillPresent 
FROM dbo.tblLEGAssets 
WHERE buildingID = 1 
GROUP BY theAssetOutletType; 

これは、同じ行の別々の列に値を置きます。これは、別の行よりも私にとって意味があります。

SELECT theassetoutlettype, 
     noofitems, 
     noremoved, 
     noofitems - noremoved AS noLeft 
FROM (SELECT theassetoutlettype, 
       Count(id) AS NoOfItems, 
       Sum(removed) AS noRemoved 
     FROM dbo.tbllegassets 
     WHERE buildingid = 1 
     GROUP BY theassetoutlettype) nested 
0

私は、ネストされたSELECTを使用することによって、周りの仕事を見つけました...多くの試行錯誤を繰り返しましたが、現在は機能しています。ここに私のストアドプロシージャソリューションがあり、追加のテーブル "tblLEGAssetOutletTypes"には、6つのアセットタイプのリストを持つ単一のフィールドが含まれています。次のコードでは、プロジェクトの種類、総資産数、削除された資産数、残っている合計金額とともに常に6行が返されます。

SELECT tblLEGAssetOutletTypes.assetOutletType, nested.NoOfItems, nested.noRemoved, NoOfItems-noRemoved AS noLeft 
FROM (SELECT  theAssetOutletType, COUNT(id) AS NoOfItems, SUM(removed) AS noRemoved 
     FROM   tblLEGAssets 
     where [email protected] 
    GROUP BY theAssetOutletType) AS nested 
RIGHT JOIN tblLEGAssetOutletTypes ON nested.theAssetOutletType = tblLEGAssetOutletTypes.assetOutletType; 
0

私が最終的に解決策を見つけた:私は使用することができますが、それはまだ可能であるならば、私は答えを知ってみたい -