0

列を行に変換し、それに応じてデータを見つけるクエリを手伝ってくれる人はいますか?

質問は以下です。列名を行に取得するクエリを試しましたが、値を取得できなかったか、列 3 と列 4 の値を理解する方法がありませんでした。私は SQL の初心者です。誰でもここで私を助けてくれますか。ピボットを提案している友人から聞いたのですが、ブラウジングすると、MYSQL で PIVOT がサポートされていないことがわかりました。

Input Table: 

E1           E2           E3           E4           E5           E6

Null         1234         234          12           A            B
123          Null         Null         Null         12           B
Null         Null         Null         Null         Null         Null
123          2            1            A            1            2


Output Table:

C1           C2           Count           TotalC           percent           

E1           123          2               2                1
E2           1234         1               2                0.5
E2           2            1               2                0.5
E3           234          1               2                0.5
E3           1            1               2                0.5
E4           12           1               2                0.5
E4           A            1               2                0.5
E5           A            1               3                0.3
E5           12           1               3                0.3
E5           1            1               3                0.3
E6           B            2               3                0.6
E6           2            1               3                0.3

質問の説明:

  1. C1 は入力テーブルの列名です。
  2. C2 は、それらの列のデータです。
  3. Count は、各列の類似アイテムとシングルの数です。
  4. TotalC は、NULL でない値の合計数です。
  5. パーセントはカウント/合計です。

私が働いたクエリ:SELECT (COLUMN_NAME)AS Column1 FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'inputtable';

注: MYSQL でクエリを実行します。

4

1 に答える 1

1

上記の私のコメントで述べたように、おそらくこの問題を別の方法で処理する必要があります。XY 問題とは何ですか?を参照してください。

ただし、必要に応じて、次を使用してこの問題を解決できますUNION

SELECT *, Count/TotalC AS percent
FROM (
  SELECT   'E1' AS C1, E1 AS C2, COUNT(*) AS Count
  FROM     Input
  WHERE    E1 IS NOT NULL
  GROUP BY C2
UNION ALL
  SELECT   'E2' AS C1, E2 AS C2, COUNT(*) AS Count
  FROM     Input
  WHERE    E2 IS NOT NULL
  GROUP BY C2
UNION ALL
  SELECT   'E3' AS C1, E3 AS C2, COUNT(*) AS Count
  FROM     Input
  WHERE    E3 IS NOT NULL
  GROUP BY C2
UNION ALL
  SELECT   'E4' AS C1, E4 AS C2, COUNT(*) AS Count
  FROM     Input
  WHERE    E4 IS NOT NULL
  GROUP BY C2
UNION ALL
  SELECT   'E5' AS C1, E5 AS C2, COUNT(*) AS Count
  FROM     Input
  WHERE    E5 IS NOT NULL
  GROUP BY C2
UNION ALL
  SELECT   'E6' AS C1, E6 AS C2, COUNT(*) AS Count
  FROM     Input
  WHERE    E6 IS NOT NULL
  GROUP BY C2
) t1 NATURAL JOIN (
  SELECT 'E1' AS C1, COUNT(E1) AS TotalC FROM Input
UNION ALL
  SELECT 'E2' AS C1, COUNT(E2) AS TotalC FROM Input
UNION ALL
  SELECT 'E3' AS C1, COUNT(E3) AS TotalC FROM Input
UNION ALL
  SELECT 'E4' AS C1, COUNT(E4) AS TotalC FROM Input
UNION ALL
  SELECT 'E5' AS C1, COUNT(E5) AS TotalC FROM Input
UNION ALL
  SELECT 'E6' AS C1, COUNT(E6) AS TotalC FROM Input
) t2

sqlfiddleで参照してください。

于 2013-01-13T19:28:52.803 に答える