這個問題是從超級用戶遷移過來的,因為它可以在 Stack Overflow 上回答。 9 小時前遷移 。
我目前正在使用 SQL Server 資料庫,我需要一個查詢,從具有這種結構的表中回傳具有相同城市的客戶對
Customer(ID, Name, Surname, City)
和這個樣本資料
Name | Surname | City
----------- ----------- -----------
Foo | Foo | New York
----------- ----------- -----------
Bar | Bar | New York
----------- ----------- -----------
Alice | A | London
----------- ----------- -----------
Bob | B | London
我嘗試定義一個連接客戶表本身的查詢
SELECT C1.Name ' ' C1.Surname CustomerA, C2.Name ' ' C2.Surname CustomerB, C1.City
FROM Customer C1 JOIN Customer C2
ON C1.City = C2.City
WHERE CustomerA <> CustomerB
但它給了我一張看起來像這樣的桌子
CustomerA | CustomerB | City
----------- ----------- -----------
Foo Foo | Bar Bar | New York
----------- ----------- -----------
Bar Bar | Foo Foo | New York
----------- ----------- -----------
Alice A | Bob B | London
----------- ----------- -----------
Bob B | Alice A | London
有重復的行但有交換的客戶。
我的問題是我必須如何選擇這些行一次(例如,對于前兩個結果,只有第一行或第二行會很棒)。
這將是預期結果的一個示例
CustomerA | CustomerB | City
----------- ----------- -----------
Foo Foo | Bar Bar | New York
----------- ----------- -----------
Alice A | Bob B | London
uj5u.com熱心網友回復:
我想我理解你在尋找什么,但它似乎過于簡化為你的實際問題。您發布的查詢非常接近作業。您不能在 where 謂詞中通過別名參考列,因此您需要使用列中的字串連接。然后你可以簡單地將 <> 更改為 > 或 < 這樣你只會得到一個匹配項。據我了解,此示例應該適用于您的問題。
declare @Customer table
(
CustID int identity
, Name varchar(10)
, Surname varchar(10)
, City varchar(10)
)
insert @Customer
select 'Foo', 'Foo', 'New York' union all
select 'Bar', 'Bar', 'New York' union all
select 'Smith', 'Smith', 'New York' union all
select 'Alice', 'A', 'London' union all
select 'Bob', 'B', 'London'
SELECT CustomerA = C1.Name ' ' C1.Surname
, CustomerB = C2.Name ' ' C2.Surname
, C1.City
FROM @Customer C1
JOIN @Customer C2 ON C1.City = C2.City
where C1.Name ' ' C1.Surname > C2.Name ' ' C2.Surname
uj5u.com熱心網友回復:
您可以對此查詢使用concatand子句group by
select concat(C1.Name," ",C1.surname) as CustomerA, concat(C2.Name," ",C2.surname) CustomerB,C1.city
from customer C1
left join customer C2
on C1.city=C2.city and C1.name<>C2.name
group by C1.city;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454749.html
