从每列获取独特的数据

时间:2012-04-16 15:06:35

标签: sql

我有一个名为article

的表
Article_type   Article_Shade  Article_tool
A              Red            FF
A              Orange         KK
B              Red            FF 

我想使用单个SQL查询获取每列的不同值。

我尝试了很多选项,如果有可能请告诉我。

预期的OutPut 应为:

    {li> A B Article_type {li> Red Orange Article_Shade {li> FF KK Article_Tool

2 个答案:

答案 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函数。其他评论员也提出了关于为什么这是不可能的好点,例如数据类型(你可能将所有内容都强制转换为字符串),以及可能导致空值的不同计数值(这会产生同样的意义)在这种情况下任何其他任意非空行。)