Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql名称相同但值不同_Sql_Sql Server - Fatal编程技术网

sql名称相同但值不同

sql名称相同但值不同,sql,sql-server,Sql,Sql Server,如何检索具有相同名称但具有不同值的所有行?例如,我有以下表格: Name|Value|Description Rob |Val1 |Text1 Alex|Val1 |Text2 Alan|Val2 |Text3 Alex|Val2 |Text4 Alex|Val2 |Text5 Alan|Val2 |Text6 我希望查询只返回多次出现但具有不同值的人员。因此,结果将是: Alex|Val1 |Text2 Alex|Val2 |Text4 Alex|Val2 |Text5 编辑:我在

如何检索具有相同名称但具有不同值的所有行?例如,我有以下表格:

Name|Value|Description
Rob |Val1 |Text1
Alex|Val1 |Text2
Alan|Val2 |Text3
Alex|Val2 |Text4
Alex|Val2 |Text5  
Alan|Val2 |Text6
我希望查询只返回多次出现但具有不同值的人员。因此,结果将是:

Alex|Val1 |Text2 
Alex|Val2 |Text4 
Alex|Val2 |Text5
编辑:我在初始表中添加了另一行。一些任务也会将艾伦作为结果的一部分返回。我不想这样,因为很明显它有相同的价值。如何实现这一点?

尝试使用join和sybquery,并具有:

或exists子句中的同一子查询:

演示 更新问题的解决方案

select * 
from Persons c
where name in 
(
select  Name   from(
       select Name,Value 
       from persons        
        group by Name,Value) T

group by Name
  having count(1)>1
)  

演示以下是一个简单的工作解决方案:

SELECT t.Name, t.Value, t.Description
FROM t_table AS t
JOIN (
    SELECT Name
    FROM (
       SELECT Name FROM  t_table GROUP BY Name,Value
    ) AS sub1
    GROUP BY Name
    HAVING COUNT(*)>1
) AS sub2 ON (t.Name=sub2.Name)
ORDER BY t.Name, t.Value

你可以这样做

从表1中选择*作为WHERE 1=CASE WHEN 从表1中选择COUNT*作为B,其中B.NAME=A.NAME >1,然后1,否则0结束

只是为了好玩。。。 交叉连接可能会像我没有测试过的那样工作:

select distinct 
    p1.*
from 

    Persons p1 
cross join 
    Persons p2 
where 
        p1.Name = p2.Name 
    and p1.Value <> p2.value
    and p1.Description <> p2.Description 
现在你可以开始讨论这将有多有效。。。
但我不会参与其中

您的SQL风格是什么?您编辑了表。因此,还要编辑所需的输出:不,结果很好。我不希望它为Alan返回任何信息,因为它具有相同的值。我希望所有的人都有相同的名字,但没有相同的值。@RoxanaDinca,所以你不想按描述过滤。正确吗?@RoxanaDinca有什么问题吗?您第一次使用group by Name、Value查询将返回错误的结果。它将按名称+值的重复数复制每一行。@Skrol29您看到sql FIDLE了吗?对我来说,没有复制品。这是第一个问题的解决方案。您的第一个SQL FIDLE do返回Alan记录,这是一个错误。另一个SQL FIDLE显示了SQL中的重复错误:@Skrol29在示例中没有行“Alex”、“Val1”、“Text7”;。如果没有这一点,它可以正确地处理第一个问题。问题是找不到返回与示例相同结果的任意查询。它还可以解决任何示例中的明确问题。您的查询返回Alex和Alan,但她说我不希望它返回Alan的任何信息是的,它只适用于'Alex'、'Val1'、'Text7'或更多,但如果没有仅来自示例的行,它不会返回任何行。查询不适用于任何情况。如果Name+Value+Description不是表中的主键,那么查询可能会返回重复的结果以及简化的结果。这是因为该查询假定名称+值+描述是标识每条记录的唯一组合。@Skrol29能否提供一个示例?您将在原始表中插入哪一行以使其不起作用?抱歉,我不明白,在您的示例中,丢失的行是什么?您可以看到插入了4条记录,查询只给出了3条记录。
SELECT t.Name, t.Value, t.Description
FROM t_table AS t
JOIN (
    SELECT Name
    FROM (
       SELECT Name FROM  t_table GROUP BY Name,Value
    ) AS sub1
    GROUP BY Name
    HAVING COUNT(*)>1
) AS sub2 ON (t.Name=sub2.Name)
ORDER BY t.Name, t.Value
select distinct 
    p1.*
from 

    Persons p1 
cross join 
    Persons p2 
where 
        p1.Name = p2.Name 
    and p1.Value <> p2.value
    and p1.Description <> p2.Description