teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

推敲

2018/05/16 02:54

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -75,7 +75,7 @@
75
75
  group by rrh.rh_pk, rrd.c_cd, rrh.o_no, rrd.item_no
76
76
  ) rrd_sum
77
77
  on rd_sum.rh_pk = rrd_sum.rh_pk
78
- and rd_sum.c_cd = rrd_sum.c_cd a
78
+ and rd_sum.c_cd = rrd_sum.c_cd
79
79
  and rd_sum.o_no = rrd_sum.o_no
80
80
  and rd_sum.item_no = rrd_sum.item_no
81
81
  where rd_sum.c_cd='01' and rd_sum.o_no='A100'

6

推敲

2018/05/16 02:54

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -31,26 +31,26 @@
31
31
  from (
32
32
  select rd.rh_pk, rd.rd_pk, rd.item_no, sum(sd.quantity) as quantity
33
33
  from tbl1 rd
34
- inner join tbl2 sd
34
+ inner join tbl2 sd
35
- on rd.rh_pk = sd.rh_pk
35
+ on rd.rh_pk = sd.rh_pk
36
- and rd.rd_pk = sd.rd_pk
36
+ and rd.rd_pk = sd.rd_pk
37
- and rd.c_cd = sd.c_cd
37
+ and rd.c_cd = sd.c_cd
38
38
  where rd.c_cd = '01'
39
39
  and rd.o_no = 'A100'
40
40
  group by rd.rh_pk, rd.rd_pk, rd.item_no
41
41
  ) rd_sum
42
42
  inner join (
43
43
  select rrh.rh_pk, rrd.item_no, sum(rrd.diff) as diff
44
- from tbl3 rrh
44
+ from tbl3 rrh
45
- inner join tbl4 rrd
45
+ inner join tbl4 rrd
46
- on rrh.r_pk = rrd.r_pk
46
+ on rrh.r_pk = rrd.r_pk
47
- and rrh.c_cd = rrd.c_cd
47
+ and rrh.c_cd = rrd.c_cd
48
48
  where rrd.c_cd = '01'
49
49
  and rrh.o_no = 'A100'
50
50
  group by rrh.rh_pk, rrd.item_no
51
51
  ) rrd_sum
52
52
  on rd_sum.rh_pk = rrd_sum.rh_pk
53
- and rd_sum.item_no = rrd_sum.item_no
53
+ and rd_sum.item_no = rrd_sum.item_no
54
54
  order by item_no
55
55
  ```
56
56
  追記2
@@ -61,18 +61,17 @@
61
61
  from (
62
62
  select rd.rh_pk, rd.rd_pk, rd.c_cd, rd.o_no, rd.item_no, sum(sd.quantity) as quantity
63
63
  from tbl1 rd
64
- inner join tbl2 sd
64
+ inner join tbl2 sd
65
- on rd.rh_pk = sd.rh_pk
65
+ on rd.rh_pk = sd.rh_pk
66
- and rd.rd_pk = sd.rd_pk
66
+ and rd.rd_pk = sd.rd_pk
67
- and rd.c_cd = sd.c_cd
67
+ and rd.c_cd = sd.c_cd
68
68
  group by rd.rh_pk, rd.rd_pk, rd.c_cd, rd.o_no, rd.item_no
69
- ) rd_sum
70
- inner join (
69
+ ) rd_sum inner join (
71
70
  select rrh.rh_pk, rrd.c_cd, rrh.o_no, rrd.item_no, sum(rrd.diff) as diff
72
- from tbl3 rrh
71
+ from tbl3 rrh
73
- inner join tbl4 rrd
72
+ inner join tbl4 rrd
74
- on rrh.r_pk = rrd.r_pk
73
+ on rrh.r_pk = rrd.r_pk
75
- and rrh.c_cd = rrd.c_cd
74
+ and rrh.c_cd = rrd.c_cd
76
75
  group by rrh.rh_pk, rrd.c_cd, rrh.o_no, rrd.item_no
77
76
  ) rrd_sum
78
77
  on rd_sum.rh_pk = rrd_sum.rh_pk

5

追記

2018/05/15 14:39

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -52,4 +52,33 @@
52
52
  on rd_sum.rh_pk = rrd_sum.rh_pk
53
53
  and rd_sum.item_no = rrd_sum.item_no
54
54
  order by item_no
55
+ ```
56
+ 追記2
57
+ ---
58
+ データ件数が少ないならさほどレスポンスは落ちないでしょうから、条件部分を収斂したパターンも記述しておきます。
59
+ ```SQL
60
+ select rd_sum.rh_pk, rd_sum.rd_pk, rd_sum.item_no, rd_sum.quantity, rrd_sum.diff
61
+ from (
62
+ select rd.rh_pk, rd.rd_pk, rd.c_cd, rd.o_no, rd.item_no, sum(sd.quantity) as quantity
63
+ from tbl1 rd
64
+ inner join tbl2 sd
65
+ on rd.rh_pk = sd.rh_pk
66
+ and rd.rd_pk = sd.rd_pk
67
+ and rd.c_cd = sd.c_cd
68
+ group by rd.rh_pk, rd.rd_pk, rd.c_cd, rd.o_no, rd.item_no
69
+ ) rd_sum
70
+ inner join (
71
+ select rrh.rh_pk, rrd.c_cd, rrh.o_no, rrd.item_no, sum(rrd.diff) as diff
72
+ from tbl3 rrh
73
+ inner join tbl4 rrd
74
+ on rrh.r_pk = rrd.r_pk
75
+ and rrh.c_cd = rrd.c_cd
76
+ group by rrh.rh_pk, rrd.c_cd, rrh.o_no, rrd.item_no
77
+ ) rrd_sum
78
+ on rd_sum.rh_pk = rrd_sum.rh_pk
79
+ and rd_sum.c_cd = rrd_sum.c_cd a
80
+ and rd_sum.o_no = rrd_sum.o_no
81
+ and rd_sum.item_no = rrd_sum.item_no
82
+ where rd_sum.c_cd='01' and rd_sum.o_no='A100'
83
+ order by item_no
55
84
  ```

4

修正

2018/05/15 08:21

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -36,7 +36,7 @@
36
36
  and rd.rd_pk = sd.rd_pk
37
37
  and rd.c_cd = sd.c_cd
38
38
  where rd.c_cd = '01'
39
- and rd.o_no = 'a100'
39
+ and rd.o_no = 'A100'
40
40
  group by rd.rh_pk, rd.rd_pk, rd.item_no
41
41
  ) rd_sum
42
42
  inner join (
@@ -46,7 +46,7 @@
46
46
  on rrh.r_pk = rrd.r_pk
47
47
  and rrh.c_cd = rrd.c_cd
48
48
  where rrd.c_cd = '01'
49
- and rrh.o_no = 'a100'
49
+ and rrh.o_no = 'A100'
50
50
  group by rrh.rh_pk, rrd.item_no
51
51
  ) rrd_sum
52
52
  on rd_sum.rh_pk = rrd_sum.rh_pk

3

追記

2018/05/15 07:36

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -24,6 +24,7 @@
24
24
  追記
25
25
  ---
26
26
  質問のSQLでは動作しないので、推測での記述ですけど、以下でquantityとdiffは取り出せていると思います。
27
+ こういった場合、そのぞれの集計結果をどの項目で結びつけるかを明らかにすると迷わなくてすみます。
27
28
  ※diffの複数行については良く分からないので、質問にデータイメージを追記して下さい。
28
29
  ```SQL
29
30
  select rd_sum.rh_pk, rd_sum.rd_pk, rd_sum.item_no, rd_sum.quantity, rrd_sum.diff

2

追記

2018/05/15 07:13

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -19,4 +19,36 @@
19
19
  > ※QuantityとDiffはレコード増える仕様
20
20
  > この例ではDiffは1つですが複数行ある場合を仮定して頂きたいです。
21
21
 
22
- sum(diff1), sum(diff2)のように増えるとしても、集計の単位が同じなら、sum()の項目を増やせば良いだけ
22
+ sum(diff1), sum(diff2)のように増えるとしても、集計の単位が同じなら、sum()の項目を増やせば良いだけ
23
+
24
+ 追記
25
+ ---
26
+ 質問のSQLでは動作しないので、推測での記述ですけど、以下でquantityとdiffは取り出せていると思います。
27
+ ※diffの複数行については良く分からないので、質問にデータイメージを追記して下さい。
28
+ ```SQL
29
+ select rd_sum.rh_pk, rd_sum.rd_pk, rd_sum.item_no, rd_sum.quantity, rrd_sum.diff
30
+ from (
31
+ select rd.rh_pk, rd.rd_pk, rd.item_no, sum(sd.quantity) as quantity
32
+ from tbl1 rd
33
+ inner join tbl2 sd
34
+ on rd.rh_pk = sd.rh_pk
35
+ and rd.rd_pk = sd.rd_pk
36
+ and rd.c_cd = sd.c_cd
37
+ where rd.c_cd = '01'
38
+ and rd.o_no = 'a100'
39
+ group by rd.rh_pk, rd.rd_pk, rd.item_no
40
+ ) rd_sum
41
+ inner join (
42
+ select rrh.rh_pk, rrd.item_no, sum(rrd.diff) as diff
43
+ from tbl3 rrh
44
+ inner join tbl4 rrd
45
+ on rrh.r_pk = rrd.r_pk
46
+ and rrh.c_cd = rrd.c_cd
47
+ where rrd.c_cd = '01'
48
+ and rrh.o_no = 'a100'
49
+ group by rrh.rh_pk, rrd.item_no
50
+ ) rrd_sum
51
+ on rd_sum.rh_pk = rrd_sum.rh_pk
52
+ and rd_sum.item_no = rrd_sum.item_no
53
+ order by item_no
54
+ ```

1

追記

2018/05/15 07:06

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -15,4 +15,8 @@
15
15
  WHERE RD.C_Cd = '01'
16
16
  AND RD.O_No = 'A100'
17
17
  GROUP BY RD.RH_PK, RD.RD_PK, RD.Item_no
18
- ```
18
+ ```
19
+ > ※QuantityとDiffはレコード増える仕様
20
+ > この例ではDiffは1つですが複数行ある場合を仮定して頂きたいです。
21
+
22
+ sum(diff1), sum(diff2)のように増えるとしても、集計の単位が同じなら、sum()の項目を増やせば良いだけ