[英]How to use distinct with inner join having sub query
我希望事務表中的UserId應該是不同的,所以您能告訴我如何從具有內部聯接的事務表中獲取不同的用戶ID嗎?
SELECT TransactionMaster.TransId, TransactionMaster.UserId, TransactionMaster.SessionId, TransactionMaster.TotalAmount, TransactionMaster.PaymentStatus,
TransactionMaster.TransDate, TransactionMaster.ShippingId, TransactionMaster.IPAddress, TransactionMaster.IsShipped, TransactionMaster.DeliveredDate,
Register.ID, Register.Password, Register.FirstName, Register.LastName, Register.MiddleName, Register.Address, Register.CountryId, Register.StateId,
Register.CityId, Register.Email, Register.Status, Register.IPAddress AS Expr1, Register.Account, Register.ZipCode
FROM TransactionMaster INNER JOIN
Register ON TransactionMaster.UserId = Register.ID
WHERE(TransactionMaster.UserId IN (SELECT Distinct UserId FROM TransactionMaster WHERE TransactionMaster.UserId IN(SELECT UserId FROM TransactionMaster)))
現在我可以輸出:
**Transid UserId sessioId otherfields**
Ai36Lft9X4PrHg8p7BTs2n5K5Dcz4E z8CFj92M dzwsyf55s1io1e552ifty555
d3YAs6j4L2SxJm95PeDn78NbCq49By f4M5Rmr9 1u0mkd45rt5jz455axcvbgbd
k6Z5LiYp39CnBs24Gca8D7Sfw8J6Xd f4M5Rmr9 zo1gwz45gtbg3uegkkf21dmz
但是我想要這種類型的輸出
**Transid UserId sessioId otherfields**
Ai36Lft9X4PrHg8p7BTs2n5K5Dcz4E z8CFj92M dzwsyf55s1io1e552ifty555
d3YAs6j4L2SxJm95PeDn78NbCq49By f4M5Rmr9 1u0mkd45rt5jz455axcvbgbd
您可以使用cte和row_number()獲取不同的用戶ID。 這是一個簡化的版本,應該可以將其應用於更復雜的查詢。
declare @T table(TransID varchar(50), UserID varchar(8), SessionID varchar(50))
insert into @T values
('Ai36Lft9X4PrHg8p7BTs2n5K5Dcz4E', 'z8CFj92M', 'dzwsyf55s1io1e552ifty555'),
('d3YAs6j4L2SxJm95PeDn78NbCq49By', 'f4M5Rmr9', '1u0mkd45rt5jz455axcvbgbd'),
('k6Z5LiYp39CnBs24Gca8D7Sfw8J6Xd', 'f4M5Rmr9', 'zo1gwz45gtbg3uegkkf21dmz')
;with cte as
(
select
*,
row_number() over(partition by UserID order by SessionID) as rn
from @T
)
select *
from cte
where rn = 1
結果
TransID UserID SessionID rn
d3YAs6j4L2SxJm95PeDn78NbCq49By f4M5Rmr9 1u0mkd45rt5jz455axcvbgbd 1
Ai36Lft9X4PrHg8p7BTs2n5K5Dcz4E z8CFj92M dzwsyf55s1io1e552ifty555 1
按UserId分組,然后確定哪種聚合適合其余的列。 我認為這可能會變得很難...
您的問題是,唯一選擇始終適用於所有列。 因此,您唯一的方法是分組,但要分組,則需要在要顯示的每個列上都具有聚合功能。 您提供的有關線索的信息很少,如果可行的話。
首先將即將到來的輸出存儲在臨時表(#TempTrans)中,然后執行以下操作:
SELECT DISTINCT UserID FROM #TempTrans
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.