0

任何人都可以帮助我进行将列转换为行然后相应地查找数据的查询。

问题如下。我尝试了一个查询,将列名放入行中,但我无法获取值或有任何想法为第 3 列和第 4 列找出它。我是 SQL 的新成员。有谁可以帮我离开这里吗。我从朋友那里听说过 Pivot,当我浏览时发现 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. 计数是每列中相似项目和单项的数量。
  4. TotalC 是非空值的总数。
  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 回答