我有一个名为article
的表Article_type Article_Shade Article_tool
A Red FF
A Orange KK
B Red FF
我想使用单个SQL查询获取每列的不同值。
我尝试了很多选项,如果有可能请告诉我。
预期的OutPut 应为:
A B
Article_type
{li> Red Orange
Article_Shade
{li> FF KK
Article_Tool
答案 0 :(得分:0)
这是在Oracle上完成的,不确定你使用的是什么数据库,但希望这会给你一个想法。
CREATE TABLE article (article_type VARCHAR2(100), article_shade VARCHAR2(50), article_tool VARCHAR2(75));
INSERT INTO article VALUES ('A','Red','FF');
INSERT INTO article VALUES ('A','Orange','KK');
INSERT INTO article VALUES ('B','Red','FF');
COMMIT;
SELECT column_name
, val
FROM (
SELECT DISTINCT 'article_type' column_name
, Article_type val
FROM article
UNION ALL
SELECT DISTINCT 'article_shade' column_name
, Article_Shade val
FROM article
UNION ALL
SELECT DISTINCT 'article_tool' column_name
, Article_tool val
FROM article
) a
输出:
COLUMN_NAME VAL
1 article_type B
2 article_type A
3 article_shade Orange
4 article_shade Red
5 article_tool FF
6 article_tool KK
注意:强> 如果您尝试使用3个单独的列(例如,一个用于article_type的列,一个用于article_shade,一个用于article_tool)来获取此结果,则这是无意义的,因为每个列可能具有不同数量的不同值。
答案 1 :(得分:0)
我假设这接近你的预期输出:
Aricle_type Article_Shade Article_tool
A Orange FF
B Red KK
虽然可以创建一个可以执行此操作的查询,但它看似毫无意义。要单独对每列不同值进行排序并将它们一起显示,将向我们显示可能不存在的记录。您将任意组合表示实际上不在表中的实体的属性。在这种情况下,有一个很好的理由是您无法找到将执行此操作的SQL函数。其他评论员也提出了关于为什么这是不可能的好点,例如数据类型(你可能将所有内容都强制转换为字符串),以及可能导致空值的不同计数值(这会产生同样的意义)在这种情况下任何其他任意非空行。)