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