在SQL中拆分具有多个值的行

在SQL中拆分具有多个值的行,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,我试图从数据库中分离出几个值 有两列,Test和Test_参数。我想为相同的测试值提取那些具有不同测试参数值的行。例如,在我的屏幕截图中,我希望选择Grade:,因为它具有不同的Test_参数值。我知道它有一个非常简单的解决方案,但我无法找到它。您可以使用聚合并拥有: 我可能会被这个问题弄糊涂,但这不管用吗 SELECT * FROM t WHERE test <> test_parameter 尝试以下任一操作以删除冒号并进行比较: SELECT DISTINCT tes

我试图从数据库中分离出几个值


有两列,Test和Test_参数。我想为相同的测试值提取那些具有不同测试参数值的行。例如,在我的屏幕截图中,我希望选择Grade:,因为它具有不同的Test_参数值。我知道它有一个非常简单的解决方案,但我无法找到它。

您可以使用聚合并拥有:


我可能会被这个问题弄糊涂,但这不管用吗

SELECT *
FROM t
WHERE test <> test_parameter

尝试以下任一操作以删除冒号并进行比较:

    SELECT DISTINCT test FROM table1 WHERE test NOT LIKE test_parameter||'%'

    SELECT DISTINCT test FROM table1 WHERE SUBSTR(test,1,INSTR(test,':')-1) <> test_parameter

我更喜欢Gordon的答案,但一个简单的方法也许你能理解,尽管我怀疑较慢的方法是:

SELECT test 
FROM (
    SELECT test,
        COUNT(DISTINCT(test_parameter) AS c
    FROM table1
    GROUP BY 1
)
WHERE c > 1
如果您真的不希望结果中包含计数,则可以使用上面的having子句,否则会使其更简单:

SELECT test,
    COUNT(DISTINCT(test_parameter) AS c
FROM table1
GROUP BY 1
HAVING c > 1

是的,当我在这里发帖的时候,我自己也试过这个说法。我想这是最简单的解决方案。但我不确定,因为这太简单了。有时候,就是这么简单。:-需要注意的一件事是区分大小写。如果您希望它不区分大小写,那么您应该在test和test_参数周围加上一个上限或下限。我认为这个答案可能在产生相同输出的同时对问题有不同的理解。要测试这一点,只需添加另一个带有一个test_参数的测试,比如testtest_参数,然后运行所有答案。问题是-您是否试图在测试值不等于相应的测试参数值的情况下输出测试-VS-您是否试图输出测试参数不一致的测试?如果是前者,就用这个答案。如果是后者,就用戈登的回答。嘿,戈登,非常感谢你的回答!我只是想知道你使用的最大和最小函数。你能给我解释一下吗?Max和Min是可以在雪花文档中引用的表函数:@AshishKumar。这些是聚合函数和SQL的一个非常基本的部分。是的,我以前使用过它们,但在我的例子中它是一个字符串,所以我询问了您使用的上下文。
SELECT test,
    COUNT(DISTINCT(test_parameter) AS c
FROM table1
GROUP BY 1
HAVING c > 1