I have 3 tables
------------------------
users
1 -> mark
2 -> adel
3 -> khali
4 -> piter
5 -> adam
------------------------
groups
1 -> group 1
2 -> group 2
3 -> group 3
4 -> group 4
----------------------
usersGroups
1 -> 4
3 -> 2
4 -> 3
1 -> 2
I want to display
if username has a group then 1 if it hasn't then 0
like this whith pivot but I dont know how ???
-- username group1 group2 group3 group4
----------------------------------------------------
-- mark 0 1 0 1
-- adel 0 1 0 0
-- adam 0 0 1 0
I try this please help me
SELECT username, [group1] AS 'group1', [group2] AS 'group2', [group3] AS 'group3', [group4] AS 'group4'
FROM
(
SELECT ug.groupid, ug.userid, g.description, u.username FROM users u
INNER JOIN usersgroups ug ON u.userid = ug.userid
INNER JOIN groups g ON ug.groupid = g.groupid
)AS q
PIVOT
(COUNT(groupid) FOR [description] IN ([group1],[group2],[group3],[group4])) AS pvt
回答
測試數據
DECLARE @users TABLE (userid INT, username NVARCHAR(100))
INSERT INTO @users
VALUES (1,'mark'),(2,'adel'),(3,'khali'),(4,'piter'),(5,'adam')
DECLARE @groups TABLE (groupid INT, [description] NVARCHAR(100))
INSERT INTO @groups
VALUES
(1,'group 1'),(2,'group 2'),(3,'group 3'),(4,'group 4')
DECLARE @usersGroups TABLE (userid INT, groupid INT)
INSERT INTO @usersGroups
VALUES (1,4),(3,2),(4,3),(1,2)
查詢
SELECT username
, CASE WHEN [group 1] IS NOT NULL THEN 1 ELSE 0 END AS 'group1'
, CASE WHEN [group 2] IS NOT NULL THEN 1 ELSE 0 END AS 'group2'
, CASE WHEN [group 3] IS NOT NULL THEN 1 ELSE 0 END AS 'group3'
, CASE WHEN [group 4] IS NOT NULL THEN 1 ELSE 0 END AS 'group4'
FROM
(
SELECT ug.groupid, ug.userid, g.description, u.username
FROM @users u INNER JOIN @usersGroups ug
ON u.userid = ug.userid
INNER JOIN @groups g
ON ug.groupid = g.groupid
)AS q
PIVOT
(MIN(groupid)
FOR [description]
IN ([group 1],[group 2],[group 3],[group 4])
) AS pvt
結果集
╔══════════╦════════╦════════╦════════╦════════╗
║ username ║ group1 ║ group2 ║ group3 ║ group4 ║
╠══════════╬════════╬════════╬════════╬════════╣
║ mark ║ 0 ║ 1 ║ 0 ║ 1 ║
║ khali ║ 0 ║ 1 ║ 0 ║ 0 ║
║ piter ║ 0 ║ 0 ║ 1 ║ 0 ║
╚══════════╩════════╩════════╩════════╩════════╝
但如果標有[組4] 2次它顯示2 –
@ user3163007是的,看看我已經更新了答案 –
哦tnx tnx tnx你是最好的^ _^ –
SELECT case when ug.groupid is null then 0 else 1 end as groupid,
ug.userid, g.description, u.username FROM users u
LEFT JOIN usersgroups ug ON u.userid = ug.userid
INNER JOIN groups g ON ug.groupid = g.groupid
,然後更改總COUNT(groupid)
到MAX(groupid)
我這樣做,像你說 /* SELECT用戶名,[1組] AS '硫基',[第2組] AS '組2',[組3] AS '組3',[組4] AS 'GROUP4' FROM ( 選擇情況下,當ug.groupid爲空然後爲0其他1結束爲組ID, ug.userid,g.description,u.username FROM users u LEFT JOIN usersgroups ug ON u.userid = ug.userid INNER JOIN groups g ON ug.groupid = g.groupid )爲q PIVOT (MAX(GROUPID)FOR [描述]([組1],[第2組],[第3組],[組4]))AS PVT */ 但它顯示所有結果爲空? –
- 1. 我怎麼能做到這一點
- 2. 樞軸 - 我將如何做到這一點?
- 3. PowerShell的 - 我怎麼做到這一點
- 4. 我怎麼能做到這一點重寫.htaccess的
- 5. 我怎麼能做到這一點MySQL查詢
- 6. 我怎麼能做到這一點jQuery的
- 7. 需要Snaphot在ReportNG失敗,我怎麼能做到這一點
- 8. 我怎麼能在JavaScript中做到這一點?
- 9. 我怎樣才能設置列表框在一個樞軸點
- 10. 如果IE6做到這一點,那麼做。我怎樣才能做到這一點
- 11. SQL Server 2008中我怎麼能做到這一點查詢的子查詢
- 12. 我無法解析這個JSON代碼,我怎麼能做到這一點?
- 13. 我想重寫FXMLLoader。我怎樣才能做到這一點?
- 14. Log4net和windows服務。我該怎麼做才能做到這一點
- 15. 我怎樣才能用一個segue來做到這一點?
- 16. 樞軸SQL到年
- 17. 更新母版頁控制怎麼能做到這一點
- 18. 我是新來的MySQL ..我怎麼能在MySQL中做到這一點?
- 19. 我怎樣才能做到這一點的設計
- 20. 我怎樣才能做到這一點Oracle查詢
- 21. 正則表達式 - 我怎樣才能做到這一點?
- 22. 我怎樣才能做到這一點與asp.net mvc路由?
- 23. 我怎樣才能在laravel做到這一點查詢
- 24. Swift - 我怎樣才能使用uicollectionview來做到這一點?
- 25. 我怎樣才能做到這一點?(僅限星號圖案)
- 26. 我怎樣才能做到這一點查詢與NHibernate
- 27. 我怎樣才能做到這一點的圖像
- 28. 我怎樣才能做到這一點與dplyr包
- 29. 我怎樣才能做到這一點:懸停圖像疊加
- 30. 我怎樣才能做到這一點sophistictaed?
現在看一看我已經更新了答案。 –