2016-03-21 16 views
0

私は3列のテーブルを持っています。例えば、Food,TypeTasteです。LibreOfficeベース - SQLクエリでの問題

  • Foodは何
  • Typeが列Tasteが可能な値として「悪い」、「グッド」または「おいしい」を持っている可能性のある値
  • として「フルーツ」や「野菜」を持つことができ
  •   Bad  Good Delicious Total 
    Fruit  05   09   16  20 
    Vegetables 12   20   03  35 
    Total  17   29   19  55 
    

私は(今のところ運を)取得するようなテーブルを生成するSQL文をしようとしています

Type/Tasteの組み合わせの表に表示されている数字のうち、Foodの数は出力表の数字ですか。

どのように達成できますか?

答えて

1

最初の2行はサブクエリ句でつのクエリで行うことができる。

SELECT X."Type", 
     SUM(X."Bad") AS "Bad", 
     SUM(X."Good") AS "Good", 
     SUM(X."Delicious") AS "Delicious", 
     SUM(X."Total") AS "Total" 
FROM (SELECT "Type", 
      CASEWHEN("Taste" = 'Bad',1,0) AS "Bad", 
      CASEWHEN("Taste" = 'Good',1,0) AS "Good", 
      CASEWHEN("Taste" = 'Delicious',1,0) AS "Delicious", 
      1 AS "Total" FROM "YourTableName") X 
GROUP BY "Type" 

サブクエリは、各列に1又は0で「悪い」、「良好」と「おいしい」列を作成クエリの外側部分がすべての値を加算します。

下部に合計行を表示するには、UNION ALLを使用する必要があります。これは、ベースパーサーではサポートされていません。このクエリを機能させるには、EditRun SQL Directlyオプションをオンにする必要があります。 (これは、特定のフォームとレポートの機能を無効にします。これは、パーサーを必要とします。使用上の問題はありませんが、後でフォームまたはレポートでこのクエリを使用する場合はFYIとなります)。UNION ALL基本的に同じクエリ、あなたはちょうどタイプでグループ化しません。したがって、合計:

SELECT X."Type", 
     SUM(X."Bad") AS "Bad", 
     SUM(X."Good") AS "Good", 
     SUM(X."Delicious") AS "Delicious", 
     SUM(X."Total") AS "Total" 
FROM (SELECT "Type", 
      CASEWHEN("Taste" = 'Bad',1,0) AS "Bad", 
      CASEWHEN("Taste" = 'Good',1,0) AS "Good", 
      CASEWHEN("Taste" = 'Delicious',1,0) AS "Delicious", 
      1 AS "Total" FROM "YourTableName") X 
GROUP BY "Type" 

UNION ALL 

SELECT 'Total' AS "BottomTotal", 
     SUM(Y."Bad"), 
     SUM(Y."Good"), 
     SUM(Y."Delicious"), 
     SUM(Y."Total") 
FROM (SELECT CASEWHEN("Taste" = 'Bad',1,0) AS "Bad", 
      CASEWHEN("Taste" = 'Good',1,0) AS "Good", 
      CASEWHEN("Taste" = 'Delicious',1,0) AS "Delicious", 
      1 AS "Total" FROM "YourTableName") Y 
GROUP BY "BottomTotal" 

"YourTableName"は、実際の表名に置き換えてください。