1

したがって、データベース スキーマに対してクエリを実行する必要があります: http://sqlfiddle.com/#!9/d0b643ですが、スキーマの例は次のようになります。

Table 1
itemID          sale date     salesmanID   storeID
---------------------------------------------------
1                 1/2015        1             1
1                 3/2016        1             1
2                 5/2016        2             1
2                 1/2015        4             1

Table 2
itemID           colorID           price
--------------------------------------
1                 1                23
1                 2                10
1                 3                13
2                 1                11
2                 2                14
2                 3                18

Table 3
ColorID       color
---------------------------------------
 1             Red
 2             Blue
 3             Green

Table 4
SaleBegin       SaleEnd      ColorID      salesmanID     storeID
----------------------------------------------------------------
1/1/2014        12/31/2014      1            0             1
1/1/2015        12/31/2015      2            0             1
1/1/2016        12/31/2016      3            0             1
1/1/2014        12/31/2014      3            2             1
1/1/2015        12/31/2016      2            2             1

SalesmanID があり、Table1 の saleDate が Table4 の StartDate と Enddate の間にある場合、その色を使用するということを where 句に含める必要があります。それ以外の場合、salesmanID がない場合は、StoreID を使用します (この例ではすべて 1 ですが、異なる可能性があります)。

これを追加している現在のクエリは次のとおりです。

select t1.itemID,t3.color,t2.price
from table_1 t1
LEFT JOIN table_2 t2
ON t1.itemID = t2.itemID
LEFT JOIN table_3 t3
ON t2.colorID = t3.colorID
LEFT JOIN table_4 t4
ON t3.colorID = t4.colorID
WHERE t1.sale_date BETWEEN saleBegin and saleEnd;

どうすればこれを実行できますか? 期待される結果は次のようになります。

itemID カラー 価格

1           Blue        10
1           Green       13
2           Blue        14
2           Blue        14
4

2 に答える 2

0

MSSQL ロジックを使用しようとしています。SQLフィドルで試してみてください。成功しました。このコードを自分で試して、これが必要かどうかを確認してください。

select t1.itemID,t3.color,t2.price from table_1 t1 
LEFT JOIN table_4 t41 
on t1.sale_date BETWEEN t41.saleBegin and t41.saleEnd 
and t41.salesmanID!=0 and t1.salesmanID=t41.salesmanID
LEFT JOIN table_4 t42 
on t1.sale_date BETWEEN t42.saleBegin and t42.saleEnd 
and t42.salesmanID=0 and t1.storeID=t42.storeID
INNER JOIN table_2 t2
ON t1.itemID = t2.itemID
INNER JOIN table_3 t3
ON t2.colorID = t3.colorID and t2.colorID=IF(ISNULL(t41.colorID),t42.colorID,t41.colorID)
order by t1.itemID,t3.color,t2.price;
于 2016-05-27T16:20:41.980 に答える
0

これがあなたの望むものだと思います。store @ と Sale の日付が重複しているため、取得する行が多すぎます。サンプル データ table4 を変更して、最後の 2 行をストア #2 にすると、投稿した結果が得られます。

1/1/2014        12/31/2014      3            2             2 
1/1/2015        12/31/2016      2            2             2 

Select t1.itemID,t3.color,t2.price
    From table_1 t1
    LEFT JOIN table_4 t4 ON t1.sale_date BETWEEN t4.saleBegin And t4.saleEnd And t1.SalesmanID = t4.SalesmanID
    LEFT JOIN table_4 t4a ON t1.sale_date BETWEEN t4a.saleBegin And t4a.saleEnd And t1.StoreID = t4a.StoreID
    LEFT JOIN table_2 t2 ON t1.itemID = t2.itemID And t2.ColorID = t4a.ColorID
    LEFT JOIN table_3 t3 ON t2.colorID = t3.colorID
    Where t4.SalesmanID Is Null
    Group By t1.itemID,t3.color,t2.price
Union All
Select t1.itemID,t3.color,t2.price
    From table_1 t1
    LEFT JOIN table_4 t4 ON t1.sale_date BETWEEN t4.saleBegin And t4.saleEnd And t1.SalesmanID = t4.SalesmanID
    LEFT JOIN table_2 t2 ON t1.itemID = t2.itemID And t2.ColorID = t4.ColorID
    LEFT JOIN table_3 t3 ON t2.colorID = t3.colorID
    Where t4.SalesmanID Is Not Null

itemID  color   price
1       Blue    10.000
1       Green   13.000
2       Blue    14.000
2       Blue    14.000
于 2016-05-27T15:21:13.683 に答える