1

私は4つのテーブルを持っています:
テーブルA:

|LineID|

表 B:

|Date|ShiftID|IsWorking|

表 C:

|LineID|Date|ShiftID|IsWorking|

表 D:

|ShiftID|HowLongWorks|

私が持っているビューを作成する必要があります

|LineID|Date|HowLongWorks|

このビューでは、次のものが必要です:
- テーブル A のすべての行-
テーブル B の各行のすべての日付
- IsWorking = 1 であるその日付に署名されたすべてのシフトの sum(HowLongWorks)

また、テーブル C に LineID、Date、ShiftID の組み合わせが存在する場合、IsWorking はテーブル C から取得する必要があります。テーブル B から存在しない場合は、テーブル C から取得する必要があります。

ビューで行うことは可能ですか?

例: テーブル A:

|Line 1|
|Line 2|

表 B:

|2013-01-01|1|1|
|2013-01-01|2|1|
|2013-01-02|1|1|
|2013-01-02|2|0|
|2013-01-03|1|0|
|2013-01-03|2|0|

表 C:

|Line 1|2013-01-01|1|0|
|Line 1|2013-01-01|2|0|
|Line 1|2013-01-02|1|1|
|Line 2|2013-01-03|2|1|

表 D:

|1|8|
|2|10|

ビューの結果は次のようになります。

|Line 1|2013-01-01|0|
|Line 1|2013-01-02|8|
|Line 1|2013-01-03|0|
|Line 2|2013-01-01|18|
|Line 2|2013-01-02|8|
|Line 2|2013-01-03|10|
4

1 に答える 1

1
select
    a.LineID, b.Date,
    sum(case when isnull(c.IsWorking, b.IsWorking) = 1 then d.HowLongWorks else 0 end) as HowLongWorks
from TableA as a
    cross join TableB as b
    left outer join TableC as c on
        c.LineID = a.LineID and c.Date = b.Date and c.ShiftID = b.ShiftID 
    left outer join TableD as d on d.ShiftID = b.ShiftID
group by a.LineID, b.Date
order by LineID, Date

sql fiddle demo

于 2013-09-11T17:45:57.840 に答える