2016-11-23 8 views
0

私は2つのテーブルを持っているあなたは今、私はちょうど分割したい、画像上で結果を見ることができるように、2つのテーブル Result of my query of two tables の私のクエリのSQL Serverでこのシナリオのこのクエリを作成する方法?

 select sum(dqty) as QUANTITY FROM [HQMatajer].[dbo].[TransactionItem] 
    where ItemLookupCode='306519P0001' group by Tyear, Tmonth 

select 
    ItemLookupCode, convert(INT,SUBSTRING(ItemLookupCode,8,4)) as SIZE from 
    [HQMatajer].[dbo].[ItemRelation] where ItemLookupCode='319348P0001' or 
    ChildItemLookupCode1='319348P0001' or ChildItemLookupCode2='319348P0001' or 
    ChildItemLookupCode='319348P0001' 

計算

の検索結果を私の照会です以下、TransactionItem, ItemRelationと呼ばれます2番目の結果からのサイズによる最初の結果からの量のすべての値。たとえば、

QUANTITY 
6/48 
64/48 
167/48 
31/48 
2367/48 
1664/48 
8/48 

どのように1つのクエリでそれを行うのですか?

+4

こんにちは、ようこそ。人々があなたを助けやすくするために、スクリーンショットの代わりに質問テキストを質問に入れることができます。 – mendosi

+0

TyearによってItemLookupCode = '306519P0001' グループ '[HQMatajer]から量として合計(dqty)を選択する。[DBO]。[TransactionItem] 、Tmonth ItemLookupCodeを選択し、(INT、SUBSTRING(ItemLookupCode、8,4を変換)))[SIZE from [HQMatajer]。ここで、ItemLookupCode = '319348P0001'またはChildItemLookupCode1 = '319348P0001'またはChildItemLookupCode2 = '319348P0001'またはChildItemLookupCode = '319348P0001' 'これらの2つのクエリから、上記の計算を行う –

+0

2番目のテーブルは常に1つの行しか得ません – Mansoor

答えて

0

方法。次のクエリで分割する際にこの変数を使用できます。

Declare @QUANTITY float; 

select @QUANTITY=sum(dqty) 
FROM [HQMatajer].[dbo].[TransactionItem] 
where ItemLookupCode='306519P0001' 
group by Tyear, Tmonth 


select ItemLookupCode 
,convert(INT,SUBSTRING(ItemLookupCode,8,4)) as SIZE, convert(INT,SUBSTRING(ItemLookupCode,8,4))/@QUANTITY 
from [HQMatajer].[dbo].[ItemRelation] 
where (ItemLookupCode='319348P0001' or ChildItemLookupCode1='319348P0001' or ChildItemLookupCode2='319348P0001' or ChildItemLookupCode='319348P0001') 
+0

注:これは2番目のクエリの結果が1つの場合にのみ正しく動作します... –

+0

ありがとう。あなたはクロスジョインについて話すことができます、どのように動作するのですか? –

+0

参照:http://www.w3resource.com/sql/joins/cross-join.php –

0

サイズを計算して変数に入れることができます。次に、2番目のクエリで除算に同じ変数を使用できます。

SELECT QUANTITY/SIZE QUANTITY FROM (
    select sum(dqty) as QUANTITY 
    FROM [HQMatajer].[dbo].[TransactionItem] 
    where ItemLookupCode='306519P0001' 
    group by Tyear, Tmonth 
) A 
CROSS JOIN (
    select ItemLookupCode, convert(INT,SUBSTRING(ItemLookupCode,8,4)) as SIZE 
    from [HQMatajer].[dbo].[ItemRelation] 
    where 
     ItemLookupCode='319348P0001' 
     or ChildItemLookupCode1='319348P0001' 
     or ChildItemLookupCode2='319348P0001' 
     or ChildItemLookupCode='319348P0001' 
) B 
0
CREATE TABLE #Tbl1(Qty INT) 
CREATE TABLE #Tbl2(Size INT) 

INSERT INTO #Tbl1(Qty) 
SELECT 6 UNION ALL 
SELECT 64 UNION ALL 
SELECT 167 

INSERT INTO #Tbl2(Size) 
SELECT 48 

SELECT Qty/(SELECT Size FROM #Tbl2) 
FROM #Tbl1 
0

合計値を格納する変数を使用します。これについて

declare @size int; 

set @size= (Select top 1 convert(INT,SUBSTRING(ItemLookupCode,8,4)) as SIZE from [HQMatajer].[dbo].[ItemRelation] 
where ItemLookupCode='319348P0001' or ChildItemLookupCode1='319348P0001' or ChildItemLookupCode2='319348P0001' or ChildItemLookupCode='319348P0001') 

select sum(dqty)/@size as QUANTITY FROM [HQMatajer].[dbo].[TransactionItem] 
where ItemLookupCode='306519P0001' 
group by Tyear, Tmonth 
関連する問題