我有这个问题:
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
如果有多个具有相同名称的度假村,我如何更改此查询以便仅列出度假村的名称一次?
编辑:我更改了查询。以下是实际结果:
以下是所需的结果:
答案 0 :(得分:1)
您可以按度假村信息进行分组,但是您将丢失酒店所需的详细信息。
你真的可以更好地压制"重复"应用程序层中的度假项目。
您可以在派生表中的每个组中生成行号,然后在行号<>行时查询抑制度假村的行号1,但语法将取决于您的rdbms。
编辑:
反对我更好的判断,这里有你如何在sql服务器上做到这一点。如果没有tsql的row_number或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
答案 1 :(得分:0)
请提供有关您的数据库的更多信息...如果您按resort
进行分组,并且有两行具有相同的名称但resort_id
不同,那么只有在您不知道的情况下才能进行分组选择resort_id
。或者,表resorti
的第二个选定列由以下函数之一计算: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