簡體   English   中英

如何在具有子查詢的內部聯接中使用distinct

[英]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

您可以使用cterow_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM