2016-07-25 2 views
0

スプレッドシートにエクスポート/インポートするために、MySQLでフレンドリーな価格表を出力しようとしています。果物とその価格帯を例に挙げましょう。単に http://sqlfiddle.com/#!9/c526e3/4MySQLの価格設定表をスプレッドシートのような列に表示


表:フルーツ
ID

表:fruit_pricing
ここ

は、私が参照してるスキーマのフィドルです id
fruit_id
min_quantity
max_quantity
価格

クエリを実行:グループは果物である私がやりたいのは何 MySQL result set for price breaks

SELECT 
    F.name, 
    IF(FP.min_quantity = 1, FP.price, '0') as qty_1, 
    IF(FP.min_quantity = 10, FP.price, '0') as qty_10, 
    IF(FP.min_quantity = 25, FP.price, '0') as qty_25, 
    IF(FP.min_quantity = 50, FP.price, '0') as qty_50, 
    IF(FP.min_quantity = 100, FP.price, '0') as qty_100 
FROM Fruit F 
    LEFT JOIN FruitPricing FP ON FP.fruit_id = F.id 

それは、このような結果が表示されますApple、Grape、Orangeの3行しかないので、名前は変わりません。次に、すべての0の値を適切な数量に置き換えてください。私はこのスクリーンショットでは、スプレッドシートと同じ出力を取得しようとしている:

Spreadsheet screenshot for price breaks

をこれを達成するための任意の素敵なトリックはありますか?私はこの特定の質問のためにsql-tech-speakをよく知らないので、答えを探すのが難しいです。できれば質問の件名を更新して喜んで、誰かにそれについてより良い提案があります。

+0

それは、単純な集計機能です。 – Strawberry

答えて

1
SELECT f.name 
    , SUM(CASE WHEN fp.min_quantity = 1 THEN fp.price ELSE 0 END) qty_1 
    , SUM(CASE WHEN fp.min_quantity = 10 THEN fp.price ELSE 0 END) qty_10 
    , SUM(CASE WHEN fp.min_quantity = 25 THEN fp.price ELSE 0 END) qty_25 
    , SUM(CASE WHEN fp.min_quantity = 50 THEN fp.price ELSE 0 END) qty_50 
    , SUM(CASE WHEN fp.min_quantity = 100 THEN fp.price ELSE 0 END) qty_100 
    FROM fruit f 
    LEFT 
    JOIN fruitpricing fp 
    ON fp.fruit_id = f.id 
GROUP 
    BY name; 

それは私だった場合、私はおそらく以下、およびプレゼンテーション層の残りの表示の問題を扱うんだろう、が...

SELECT f.name 
    , fp.min_quantity 
    , SUM(fp.price) qty 
    FROM fruit f 
    LEFT 
    JOIN fruitpricing fp 
    ON fp.fruit_id = f.id 
GROUP 
    BY name 
    , min_quantity; 
+0

ありがとう!私は通常、プレゼンテーションレイヤーで表示の問題を処理しますが、この場合はスプレッドシートで比較するデータを作成しようとしています。コピー/ペーストは非常に便利です。再度、感謝します! – dhildreth

関連する問題