2016-03-07 9 views
0

我有5列這樣SQL查詢,如果某個值出現在行

+----+-------------------------+-----------+--------+-----------+ 
| Id |  CreateDate  | CompanyId | UserId | IsEnabled | 
+----+-------------------------+-----------+--------+-----------+ 
| 1 | 2016-01-02 23:40:46.517 |   1 |  1 |   1 | 
| 2 | 2016-01-16 00:07:59.857 |   1 |  2 |   1 | 
| 3 | 2016-01-25 15:17:54.420 |   3 |  3 |   1 | 
| 25 | 2016-03-07 16:48:39.260 |  24 |  10 |   0 | 
| 26 | 2016-03-07 16:48:39.263 |  25 |  2 |   0 | 
+----+-------------------------+-----------+--------+-----------+ 

表一次以上(感謝http://www.sensefulsolutions.com/2010/10/format-text-as-table.html爲ASCII表!)

我試圖檢查如果一個UserId被記錄爲多個CompanyId的。

到目前爲止,我設法檢查,如果用戶ID發生通過使用此查詢

WITH T AS 
(
SELECT * , 
     Count(*) OVER (PARTITION BY UserId) as Cnt 
     From CompanyUser 
) 

select Distinct UserId 
FROM T 
Where Cnt >1 

它正確返回2出現不止一個。

我卡在哪兒,我該如何參數化UserId並檢查一個Id是否被多個公司錄製。

+1

'select count(distinct companyid)from T where userid = @ userid'? –

+0

我之前曾嘗試過,它給出了一個錯誤,事實證明我需要在WITH之前以分號開頭。它現在的作品應該花我的時間,並閱讀錯誤說明:) –

+1

@EgeBayrak不,你不需要分號來啓動一個cte。您需要用分號終止前面的語句。然而,用分號開始一個cte是非常普遍的做法。最終所有的陳述將被要求正確終止。從一開始,sql server一直非常懶散。有一些像MERGE這樣的語句在最後需要分號。 –

回答

1
Declare @UserID as bigint  
Set @UserID = 2 

select Distinct Count(CompanyID) 
FROM ComapynUser 
Where UserId = @UserId 

我想這會給你你需要的東西。

+0

謝謝你,遠比我上面的努力更簡單,更有用 –

相關問題