在 SQL 中拆分具有多个值的行
Splitting out rows with multiple values in SQL
我正在尝试从数据库中分离出一些值。
有两列,测试和 Test_Parameter。我想提取那些具有相同 "Test" 值的不同 "test_parameter" 值的行。例如,在我的屏幕截图中,我希望选择 "Grade:",因为它具有不同的 Test_Parameter 值。我知道它有一个非常简单的解决方案,但我无法弄清楚。
您可以使用聚合和 having
:
select test
from t
group by test
having min(test_parameter) <> max(test_parameter);
我可能对这个问题感到困惑,但这行不通吗?
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_Parameter。我想提取那些具有相同 "Test" 值的不同 "test_parameter" 值的行。例如,在我的屏幕截图中,我希望选择 "Grade:",因为它具有不同的 Test_Parameter 值。我知道它有一个非常简单的解决方案,但我无法弄清楚。
您可以使用聚合和 having
:
select test
from t
group by test
having min(test_parameter) <> max(test_parameter);
我可能对这个问题感到困惑,但这行不通吗?
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