回答編集履歴

6

修正版

2017/09/04 11:24

投稿

yambejp
yambejp

スコア114779

test CHANGED
@@ -155,3 +155,77 @@
155
155
 
156
156
 
157
157
  ```
158
+
159
+
160
+
161
+
162
+
163
+ # 修正版?
164
+
165
+ ```
166
+
167
+ create table tbl(kaisha int,zokusei int,hiduke date,suuchi int);
168
+
169
+ insert into tbl values
170
+
171
+ (1,1,'2017-06-01',100),
172
+
173
+ (1,2,'2017-06-01',100),
174
+
175
+ (1,3,'2017-06-01',100),
176
+
177
+ (1,4,'2017-06-01',100),
178
+
179
+ (2,1,'2017-06-01',100),
180
+
181
+ (2,2,'2017-06-01',100),
182
+
183
+ (2,3,'2017-06-01',100),
184
+
185
+ (2,4,'2017-06-01',100),
186
+
187
+ (3,1,'2017-06-01',100),
188
+
189
+ (3,2,'2017-06-01',100),
190
+
191
+ (3,3,'2017-06-01',100),
192
+
193
+ (3,4,'2017-06-01',100);
194
+
195
+ create table t_kaisha(kid int unique key,kname varchar(20));
196
+
197
+ insert into t_kaisha values(1,'F社'),(2,'R社'),(3,'C社'),(999,'合計');
198
+
199
+ create table t_zokusei(zid int unique key,zname varchar(20));
200
+
201
+ insert into t_zokusei values(1,'店舗'),(2,'免税'),(3,'国内通販'),(4,'海外通販'),(999,'合計');
202
+
203
+ select concat(kname,' - ',zname) as kz
204
+
205
+ ,coalesce(kaisha,999) as kaisha
206
+
207
+ ,coalesce(zokusei2,999) as zokusei2
208
+
209
+ ,t1.m6
210
+
211
+ from (
212
+
213
+ select kaisha,case when zokusei in (1,2) then 1 else zokusei end as zokusei2
214
+
215
+ ,sum((date_format(hiduke,'%m')='06')*suuchi) as m6
216
+
217
+ from tbl
218
+
219
+ where date_format(hiduke,'%Y')='2017'
220
+
221
+ group by kaisha asc ,zokusei2 asc with rollup
222
+
223
+ ) as t1
224
+
225
+ left join t_kaisha on coalesce(kaisha,999)=kid
226
+
227
+ left join t_zokusei on coalesce(zokusei2,999)=zid
228
+
229
+ order by kaisha,zokusei2;
230
+
231
+ ```

5

小計

2017/09/04 11:24

投稿

yambejp
yambejp

スコア114779

test CHANGED
@@ -104,19 +104,29 @@
104
104
 
105
105
  create table t_kaisha(kid int unique key,kname varchar(20));
106
106
 
107
- insert into t_kaisha values(1,'F社'),(2,'R社');
107
+ insert into t_kaisha values(1,'F社'),(2,'R社'),(999,'全社');
108
108
 
109
109
  create table t_zokusei(zid int unique key,zname varchar(20));
110
110
 
111
- insert into t_zokusei values(1,'店舗'),(2,'免税'),(3,'通販'),(99,'その他');
111
+ insert into t_zokusei values(1,'店舗'),(2,'免税'),(3,'通販'),(99,'その他'),(999,'合計');
112
112
 
113
113
  ```
114
114
 
115
- リレーションしてこう
115
+ リレーションしてこう(小計欄集計をつけときました)
116
116
 
117
117
  ```SQL
118
118
 
119
- select concat(kname,' - ',zname) as kz,t1.*
119
+ select concat(kname,' - ',zname) as kz
120
+
121
+ ,coalesce(kaisha,999) as kaisha
122
+
123
+ ,coalesce(zokusei2,999) as zokusei2
124
+
125
+ ,t1.m5
126
+
127
+ ,t1.m6
128
+
129
+ ,t1.m7
120
130
 
121
131
  from (
122
132
 
@@ -132,14 +142,16 @@
132
142
 
133
143
  where date_format(hiduke,'%Y')='2017'
134
144
 
135
- group by kaisha,zokusei2
145
+ group by kaisha asc ,zokusei2 asc with rollup
136
146
 
137
147
  ) as t1
138
148
 
139
- left join t_kaisha on kaisha=kid
149
+ left join t_kaisha on coalesce(kaisha,999)=kid
140
150
 
141
- left join t_zokusei on zokusei2=zid
151
+ left join t_zokusei on coalesce(zokusei2,999)=zid
142
152
 
143
- order by kaisha,zokusei2
153
+ order by kaisha,zokusei2;
154
+
155
+
144
156
 
145
157
  ```

4

ついでに

2017/09/01 11:54

投稿

yambejp
yambejp

スコア114779

test CHANGED
@@ -93,3 +93,53 @@
93
93
  group by kaisha,zokusei2
94
94
 
95
95
  ```
96
+
97
+
98
+
99
+ # ついでに
100
+
101
+ 会社名と属性を別テーブルで用意してやるとこう
102
+
103
+ ```SQL
104
+
105
+ create table t_kaisha(kid int unique key,kname varchar(20));
106
+
107
+ insert into t_kaisha values(1,'F社'),(2,'R社');
108
+
109
+ create table t_zokusei(zid int unique key,zname varchar(20));
110
+
111
+ insert into t_zokusei values(1,'店舗'),(2,'免税'),(3,'通販'),(99,'その他');
112
+
113
+ ```
114
+
115
+ リレーションしてこう
116
+
117
+ ```SQL
118
+
119
+ select concat(kname,' - ',zname) as kz,t1.*
120
+
121
+ from (
122
+
123
+ select kaisha,case when zokusei in (2,3) then 99 else zokusei end as zokusei2
124
+
125
+ ,sum((date_format(hiduke,'%m')='05')*suuchi) as m5
126
+
127
+ ,sum((date_format(hiduke,'%m')='06')*suuchi) as m6
128
+
129
+ ,sum((date_format(hiduke,'%m')='07')*suuchi) as m7
130
+
131
+ from tbl,t_zokusei
132
+
133
+ where date_format(hiduke,'%Y')='2017'
134
+
135
+ group by kaisha,zokusei2
136
+
137
+ ) as t1
138
+
139
+ left join t_kaisha on kaisha=kid
140
+
141
+ left join t_zokusei on zokusei2=zid
142
+
143
+ order by kaisha,zokusei2
144
+
145
+ ```

3

zokuseiまとめ

2017/09/01 11:27

投稿

yambejp
yambejp

スコア114779

test CHANGED
@@ -73,3 +73,23 @@
73
73
  group by kaisha,zokusei
74
74
 
75
75
  ```
76
+
77
+ 上記サンプルの2と3をまとめて別のコード=99として集計します
78
+
79
+ ```SQL
80
+
81
+ select kaisha,case when zokusei in (2,3) then 99 else zokusei end as zokusei2
82
+
83
+ ,sum((date_format(hiduke,'%m')='05')*suuchi) as m5
84
+
85
+ ,sum((date_format(hiduke,'%m')='06')*suuchi) as m6
86
+
87
+ ,sum((date_format(hiduke,'%m')='07')*suuchi) as m7
88
+
89
+ from tbl
90
+
91
+ where date_format(hiduke,'%Y')='2017'
92
+
93
+ group by kaisha,zokusei2
94
+
95
+ ```

2

追加情報

2017/09/01 11:07

投稿

yambejp
yambejp

スコア114779

test CHANGED
@@ -68,6 +68,8 @@
68
68
 
69
69
  from tbl
70
70
 
71
+ where date_format(hiduke,'%Y')='2017'
72
+
71
73
  group by kaisha,zokusei
72
74
 
73
75
  ```

1

sample

2017/09/01 10:58

投稿

yambejp
yambejp

スコア114779

test CHANGED
@@ -5,3 +5,69 @@
5
5
  GROUP BY orderer_id,point_of_sale_id
6
6
 
7
7
  で集計すればよいのでは?
8
+
9
+
10
+
11
+ # sample
12
+
13
+
14
+
15
+ まずデータの持ち方は、会社id、売上属性、計上日、数量の4つが必要です
16
+
17
+ それを踏まえてサンプルデータを以下とします
18
+
19
+ ```SQL
20
+
21
+ create table tbl(kaisha int,zokusei int,hiduke date,suuchi int);
22
+
23
+ insert into tbl values
24
+
25
+ (1,1,'2017-06-01',100),
26
+
27
+ (1,1,'2017-06-01',200),
28
+
29
+ (1,1,'2017-06-02',300),
30
+
31
+ (1,2,'2017-06-01',150),
32
+
33
+ (1,2,'2017-06-01',120),
34
+
35
+ (1,2,'2017-06-01',300),
36
+
37
+ (1,3,'2017-06-01',200),
38
+
39
+ (1,3,'2017-06-01',100),
40
+
41
+ (1,3,'2017-06-01',100),
42
+
43
+ (1,3,'2017-06-01',300),
44
+
45
+ (1,3,'2017-07-01',1000),
46
+
47
+ (2,1,'2017-06-01',100),
48
+
49
+ (2,1,'2017-06-02',300),
50
+
51
+ (2,2,'2017-06-01',100),
52
+
53
+ (2,3,'2017-06-01',100);
54
+
55
+ ```
56
+
57
+ 集計します
58
+
59
+ ```
60
+
61
+ select kaisha,zokusei
62
+
63
+ ,sum((date_format(hiduke,'%m')='05')*suuchi) as m5
64
+
65
+ ,sum((date_format(hiduke,'%m')='06')*suuchi) as m6
66
+
67
+ ,sum((date_format(hiduke,'%m')='07')*suuchi) as m7
68
+
69
+ from tbl
70
+
71
+ group by kaisha,zokusei
72
+
73
+ ```