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

回答編集履歴

4

推敲

2020/09/19 13:23

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -41,5 +41,5 @@
41
41
  FROM テーブル1 t
42
42
  WHERE 値引き<>'0'
43
43
  and id=(select min(id) from テーブル1 where 商品ID=t.商品ID)
44
- ORDER BY 商品ID, Ord, 数量
44
+ ORDER BY 商品ID, Ord, ID
45
45
  ```

3

追記

2020/09/19 13:23

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -19,4 +19,27 @@
19
19
  WHERE 値引き<>'0'
20
20
  GROUP BY 商品ID
21
21
  ORDER BY 商品ID, Ord, 数量
22
+ ```
23
+ 追記
24
+ --
25
+ 追加するオートナンバーを`ID`とすると、**相関副問合せ**で商品ID毎の最小のIDを求めます。
26
+ ```SQL
27
+ SELECT 商品ID, 商品名, 商品価格 AS 商品単価, 1 As Ord, 数量
28
+ FROM テーブル1
29
+ UNION ALL
30
+ SELECT 商品ID, '手数料', 手数料, 2, 1
31
+ FROM テーブル1 t
32
+ WHERE 手数料<>'0'
33
+ and id=(select min(id) from テーブル1 where 商品ID=t.商品ID)
34
+ UNION ALL
35
+ SELECT 商品ID, '送料', 送料, 3, 1
36
+ FROM テーブル1 t
37
+ WHERE 送料<>'0'
38
+ and id=(select min(id) from テーブル1 where 商品ID=t.商品ID)
39
+ UNION ALL
40
+ SELECT 商品ID, '値引き', 値引き, 4, 1
41
+ FROM テーブル1 t
42
+ WHERE 値引き<>'0'
43
+ and id=(select min(id) from テーブル1 where 商品ID=t.商品ID)
44
+ ORDER BY 商品ID, Ord, 数量
22
45
  ```

2

推敲

2020/09/19 13:17

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,4 +1,5 @@
1
- 横を縦にする場合、その項目ごとにunion して下さい。順番も必要でしょうし。
1
+ 横を縦にする場合、その項目ごとにunion して下さい。
2
+ 手数料、送料、値引き全てがある場合には、順番も必要でしょうし。
2
3
  ```SQL
3
4
  SELECT 商品ID, 商品名, 商品価格 AS 商品単価, 1 As Ord, 数量
4
5
  FROM テーブル1

1

質問が変更になったので

2020/09/18 07:22

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -1,11 +1,21 @@
1
- 手数料分ついてgroup byれば良います
1
+ 横を縦にする場合、その項目ごにunion して下さい。順番も必要でしょうし。
2
2
  ```SQL
3
- SELECT 商品ID, 商品名, 商品価格 AS 商品単価, 1 As Ord
3
+ SELECT 商品ID, 商品名, 商品価格 AS 商品単価, 1 As Ord, 数量
4
- FROM テーブル1
4
+ FROM テーブル1
5
- UNION ALL
5
+ UNION ALL
6
- SELECT 商品ID, "送", max(商品価格), 2
6
+ SELECT 商品ID, '手数', min(手数料), 2, 1
7
- FROM テーブル1
7
+ FROM テーブル1
8
- WHERE 手数料 > 0
8
+ WHERE 手数料<>'0'
9
- group by 商品ID
9
+ GROUP BY 商品ID
10
+ UNION ALL
11
+ SELECT 商品ID, '送料', min(送料), 3, 1
12
+ FROM テーブル1
13
+ WHERE 送料<>'0'
14
+ GROUP BY 商品ID
15
+ UNION ALL
16
+ SELECT 商品ID, '値引き', min(値引き), 4, 1
17
+ FROM テーブル1
18
+ WHERE 値引き<>'0'
19
+ GROUP BY 商品ID
10
- ORDER BY 商品ID, Ord;
20
+ ORDER BY 商品ID, Ord, 数量
11
21
  ```