0

似たような質問の投稿をたくさん読みましたが、まだ答えが見つかりません。私はSQLにかなり慣れていません。SQL Server Express 2008 を使用しています。

私の目標は、類似した名前を持つ複数の列間で異なるすべての値の単一列の結果を取得することです。関連する列は同じ基本名 (接尾辞) を持ち、その後に整数が続きます。列のグループが多数あるため、クエリをハードコーディングしたくありません。

Fruit1 Coating1 Temperature1   Fruit2 Coating2  Temperature2 Fruit3 Coating3  Temperature3
-----------------------------------------------------------------------------------
apple  caramel  72.5           pear   chocolate  74.1        apple  chocolate  98.6
pear   caramel  73.3           peach  chocolate  42.7        apple  chocolate  33.0

したがって、サーバーに返してもらいたいのは、たとえば、いずれか/すべての果物の列で使用されているすべての果物 リンゴ 桃 ​​ナシ

ワイルドカードを使用して列名のリストを取得する方法は既に知っています。

SELECT Column_name AS columnNames
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Column_name LIKE 'Fruit%' 

列名が既にわかっている場合、列から個別の値を見つける方法も知っています。

SELECT DISTINCT Fruit FROM(
SELECT Fruit1 as Fruit from FruitBasket
UNION
SELECT Fruit2 as Fruit from FruitBasket
UNION
SELECT Fruit3 as Fruit from FruitBasket)
AS finalOutput

私が知る必要があるのは、最初のクエリの列名の結果を 2 番目の UNION パラメータで使用する方法です。FOR ループなどを使用する必要がありますか?

ありがとう!

4

3 に答える 3

0

編集:

ユーザーはコメントで、新しいデザインにオープンであると述べました.

以下のコードの実際の例については、ここをクリックしてください

設計が悪いのは同意。私はそれを改善する方法がわかりません。

設計を改善する方法は次のとおりです。

    CREATE TABLE fruit
(
  fruit_id INT CONSTRAINT pk_fruit_pid PRIMARY KEY,
  fruit_name VARCHAR(25)
);

CREATE TABLE temperature
(
  temperature_id INT CONSTRAINT pk_sprinkle_pid PRIMARY KEY,
  temperature_value DECIMAL(18,1)
);

CREATE TABLE coating
(
  coating_id INT CONSTRAINT pk_coating_pid PRIMARY KEY,
  coating_name VARCHAR(25)
);

CREATE TABLE fruit_temperature_coating
(
  fruit_id INT CONSTRAINT fk_fruit_fid FOREIGN KEY REFERENCES fruit(fruit_id),
  temperature_id INT CONSTRAINT fk_temp_fid FOREIGN KEY REFERENCES temperature(temperature_id),
  coating_id INT CONSTRAINT fk_coating_fid FOREIGN KEY REFERENCES coating(coating_id)
);

クエリを実行します。

     SELECT f.fruit_name, 
       t.temperature_value, 
       c.coating_name 
FROM   fruit_temperature_coating AS fpc
       INNER JOIN Fruit AS f 
               ON fpc.fruit_id = f.fruit_id 
       INNER JOIN temperature AS t
               ON fpc.temperature_id = t.temperature_id 
       INNER JOIN coating AS c 
               ON fpc.coating_id = c.coating_id 
于 2013-04-30T19:15:56.797 に答える