Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 - Fatal编程技术网

Sql 如何按分组以便不计算重复项

Sql 如何按分组以便不计算重复项,sql,Sql,我有一个疑问: select resorti.resort_id ,resorti.resort ,hoteli.resort_id ,hoteli.hotel_id ,hoteli.hotel from resorti inner join hoteli on resorti.resort_id = hoteli.resort_id 如果有多个度假村的名称相同,如何更改此查询以使度假村的名称只列出一次 编辑:

我有一个疑问:

select resorti.resort_id
      ,resorti.resort
      ,hoteli.resort_id
      ,hoteli.hotel_id
      ,hoteli.hotel
  from resorti 
       inner join 
       hoteli on resorti.resort_id = hoteli.resort_id
如果有多个度假村的名称相同,如何更改此查询以使度假村的名称只列出一次

编辑:我更改了查询。以下是实际结果:

以下是期望的结果:


请提供有关您的数据库的更多信息。。。如果您按
resort
分组,并且有两行名称相同但不同的
resort\u id
,则只有在未选择
resort\u id
的情况下,才能进行分组。或者,您选择的第二列表
restori
由以下函数之一计算:SUM、AVG、MAX、MIN和COUNT

试试这样的

SELECT
    resorti.resort,
    hoteli.hotel_id,
    hoteli.hotel

FROM resorti

INNER JOIN hoteli ON resorti.resort_id = hoteli.resort_id

GROUP BY resorti.resort

您可以根据度假村信息进行分组,但您将丢失所需的酒店详细信息

实际上,您最好在应用程序层中抑制“重复”的度假村条目

您可以在派生表中的每个组内生成行号,然后在行号为1时查询该行,但语法将取决于您的rdbms

编辑:

与我更好的判断相反,以下是如何在SQLServer中实现这一点。同样,没有tsql的行号或cte也可以,只是更简洁而已

create table resorti (resort_id INT, resort VARCHAR(50))
create table hoteli (hotel_id INT, resort_id INT, hotel VARCHAR(50))

insert into resorti values (1,'resort_1'),(2,'resort_2')
insert into hoteli values (1,1,'hotel_1a'),(2,1,'hotel_1b'), (3,2,'hotel_2a'),(4,2,'hotel_2b')


;with cte as (
  SELECT *
        ,ROW_NUMBER() OVER (PARTITION BY resort_id ORDER BY hotel_id) rn
    FROM hoteli
)
select case when rn=1 then resorti.resort_id end resort_id
      ,case when rn=1 then resorti.resort end resort
      ,resorti.resort
      ,cte.hotel_id
      ,cte.hotel
  from resorti 
       inner join 
       cte on resorti.resort_id = cte.resort_id

请举例说明您希望看到的结果。同时在数据库中标记问题。这绝对是应用层的工作,而不是查询。同意…将看到…:(