2015-09-09 68 views
1

我有表friends下面。條件返回列數

----------------------------- 
| id | user_id | friends_id | 
----------------------------- 
| 1 | 1 |  2  | 
----------------------------- 
| 2 | 1 |  3  | 
----------------------------- 
| 3 | 1 |  4  | 
----------------------------- 
| 4 | 2 |  1  | 
----------------------------- 
| 5 | 3 |  5  | 
----------------------------- 
| 6 | 4 |  5  | 
----------------------------- 

SQL查詢:

select user_id, friends_id from friends where user_id = 1 

上述查詢給我下面的結果。

------------------------ 
| user_id | friends_id | 
------------------------ 
| 1 |  2  | 
------------------------ 
| 1 |  3  | 
------------------------ 
| 1 |  4  | 
------------------------ 

我想resul這樣的:

------------------------ 
| user_id | friends_id | 
------------------------ 
| 1 | many  | 
------------------------ 
  • 如果任何用戶有朋友大於1,我必須寫的字 '多'。
  • 如果任何用戶有1個朋友,我必須寫他的ID。

我該怎麼做? 我GOOGLE了,無法向谷歌解釋我的問題。

+0

GROUP BY,圍繞在COUNT CASE選擇列表。 – jarlh

+0

@jarlh,但如何? –

回答

1

做一個GROUP BY噸o計數朋友的人數。使用CASE返回「多」,如果超過1樓的朋友,或friend_id如果只有一個(需要CAST爲字符類型,用「多」兼容)。

select user_id, 
     case when count(friends_id) > 1 then 'Many' 
     else cast(min(friends_id) as varchar(11)) end as friends_id 
from friends 
group by user_id 
+0

如果在表「friends」列中,friends_id將成爲「friends_name」,將會是** varchar **? _count_會工作嗎? –

+0

並不重要,但CAST可能會被刪除。 – jarlh

0

我更新查詢,包括

SQL FIDDLE DEMO

WITH fCount as (
     SELECT user_id, min(friends_id) friends_id, count(friends_id) nFriend 
     FROM friends 
     GROUP BY user_id 
) 
select user_id, CASE 
        WHEN nFriend > 1 THEN 'many' 
        ELSE cast(friends_id as nvarchar(10)) 
       END friends_id 
from fCount 
+0

如果你添加一個GROUP BY,它會更通用,並且可以獲得多個user_id的數據。 – jarlh

+0

@jarth我更新了查詢。我離開了'where user_id = 1',以便在'count = 1'時看到結果。 –

0

試試這個

select user_id, CASE 
        WHEN count(friends_id) > 1 THEN 'many' 
        ELSE friends_id 
       END friends_id 
from friends 
where user_id = 1 
+0

語法錯誤。 GROUP BY是「從裏到外」...... – jarlh

0

嗨,你可以使用下面的查詢:

   CREATE TABLE #Temp (
       ID INT Identity(1, 1) 
       ,UID INT 
       ,f_id NVARCHAR(10) 
       ) 

      INSERT INTO #temp 
      SELECT 1 
       ,2 

      UNION ALL 

      SELECT 1 
       ,3 

      UNION ALL 

      SELECT 1 
       ,4 

      UNION ALL 

      SELECT 2 
       ,1 

      SELECT uid 
       ,COUNT(f_id) AS COUNT_of_Friends 
      INTO #Temp2 
      FROM #temp 
      GROUP BY Uid 

      SELECT t1.Uid 
       ,CASE 
        WHEN t2.COUNT_of_Friends > 1 
         THEN 'Many' 
        ELSE f_id 
        END AS F_id 
      FROM #temp T1 
      INNER JOIN #Temp2 T2 ON T1.Uid = t2.Uid