テーブルAは、注文ごとに1行の注文テーブルです。表Bは項目ごとに1行のItemsテーブルです。それらは注文番号によってリンクされています。オーダーに1つ以上のアイテムがあった場合、私はこのO/Nに参加すると、複数のオーダーのラインを取得します。私は別のテーブルのフィールドでグループ化しているので、そのメソッドを使用することはできません。MYSQL "レコード"ごとに異なる行の金額で関連テーブルを結合
正しい順序で結合する方法1注文行と3アイテム行が3注文と3アイテムに変わらない?
基本的な質問に対する謝罪、私の脳は今日のメルトダウンにあります。
私は以下で尋ねていることを簡略化しました。
CREATE TABLE Orders
(`ORDURN` varchar(8), `ORDSOU` varchar(10), `ORDVAL` decimal(9,2))
;
INSERT INTO Orders
(`ORDURN`, `ORDSOU`, `ORDVAL`)
VALUES
('12345112', 'WEB', '28.41'),
('22544548', 'ADVERT', '11.58'),
('44848643', 'TELEPHONE', '41.18')
;
CREATE TABLE Items
(`ITMSTK` varchar(10), `ITMQTY` varchar (3), `ITMCOG` int(9), `ITMURN` varchar(8), `ITMSOU` varchar(10))
;
INSERT INTO Items
(`ITMSTK`, `ITMQTY`, `ITMCOG`, `ITMURN`, `ITMSOU`)
VALUES
('WN778', '1', '2.00', '12345112', 'WEB'),
('WN776', '1', '1.45', '12345112', 'WEB'),
('WN771', '1', '1.86', '12345112', 'WEB'),
('WN845', '1', '1.45', '22544548', 'ADVERT'),
('WN846', '1', '1.38', '22544548', 'ADVERT'),
('WN845', '1', '20.16', '44848643', 'TELEPHONE')
;
CREATE TABLE Sources
(`SOUCOD` varchar(10), `SOUDESC` varchar(45))
;
INSERT INTO Sources
(`SOUCOD`, `SOUDESC`)
VALUES
('WEB', 'Web Orders 2016'),
('ADVERT', 'Advert Junes 2016'),
('TELEPHONE', 'Telephone Orders 2016')
;
そして、私はその後、
select
S.soucod as Sources,
s.soudesc as Description,
sum(i.itmcog) as COG,
count(DISTINCT o.ordurn) as Orders,
sum(o.ordval) as OrderValue
from sources s
join orders o on o.ordsou = s.soucod
join items i on i.itmsou = s.soucod
group by s.soucod
以下このクエリを実行していることは私を与えるために
Sources Description COG Orders OrderValue
ADVERT Advert Junes 2016 2 1 23.16
TELEPHONE Telephone Orders 2016 20 1 41.18
WEB Web Orders 2016 5 1 85.23
明らか
それは複数行
を数えているように順序値が加入によって歪められていますこれは望ましい結果です(商品の原価は間違っていますが、私はそれがなぜ私のクリエイティブなのかを知っていますデータをated、このコラムは)アイテムテーブルに持参する必要性を示すこと以外の目的のために、ここではありません。
Sources Description COG Orders OrderValue
ADVERT Advert Junes 2016 2 1 11.58
TELEPHONE Telephone Orders 2016 20 1 41.18
WEB Web Orders 2016 5 1 28.41
私は、これはそれを説明したいと考えています。