sql – 连接多行

前端之家收集整理的这篇文章主要介绍了sql – 连接多行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Microsoft sql Server 2005.

我想我需要一个子查询.

我正在为每个客户寻找一(1)行,其中AvailableAction字段是每个客户的所有操作的串联.

  1. use tempdb
  2. GO
  3. IF DB_ID('myDatabase') IS NOT NULL
  4. DROP DATABASE myDatabase
  5. go
  6. CREATE DATABASE myDatabase
  7. GO
  8. USE myDatabase
  9. GO
  10. create table Cust(
  11. CustID Int Identity Primary Key,CustName Varchar(255)
  12. )
  13. GO
  14. INSERT INTO Cust(CustName) values('One')
  15. INSERT INTO Cust(CustName) values('Two')
  16. GO
  17. CREATE TABLE Action(
  18. ActionID Int Identity(101,1) Primary Key,ActionName Varchar(128)
  19. )
  20. GO
  21. INSERT INTO Action(ActionName) VALUES('Insert')
  22. INSERT INTO Action(ActionName) VALUES('Update')
  23. INSERT INTO Action(ActionName) VALUES('Delete')
  24. INSERT INTO Action(ActionName) VALUES('Print')
  25. GO
  26. create table CustAction(
  27. CustActionID Int Identity Primary Key,CustID Int,ActionID Int
  28. )
  29. GO
  30. INSERT INTO CustAction(CustID,ActionID) VALUES(1,101)
  31. INSERT INTO CustAction(CustID,102)
  32. INSERT INTO CustAction(CustID,ActionID) VALUES(2,103)
  33. GO
  34. SELECT Cust.CustID,CustName,ActionName
  35. FROM CustAction
  36. JOIN Cust
  37. ON CustAction.CustID = Cust.CustID
  38. JOIN Action
  39. ON CustAction.ActionID = Action.ActionID
  40. GO
  41. SELECT
  42. Cust.CustID,'<option value="' + CAST(Action.ActionID AS Varchar) + '">' + ActionName + '</option>' AS AvailableAction
  43. FROM CustAction
  44. JOIN Cust
  45. ON CustAction.CustID = Cust.CustID
  46. JOIN Action
  47. ON CustAction.ActionID = Action.ActionID

我希望输出为:

  1. CustID AvailableAction
  2.  
  3. 1 <option value="101">Insert</option><option value="102">Update</option>
  4. 2 <option value="102">Update</option><option value="103">Delete</option>

解决方法

2005年
  1. SELECT CustID,(SELECT ca.ActionID [@value],ActionName [text()]
  2. FROM dbo.CustAction ca
  3. INNER JOIN dbo.Action ON ca.ActionID = Action.ActionID
  4. WHERE ca.CustID = c.CustID
  5. FOR XML PATH('option'),TYPE) AvailableAction
  6. FROM dbo.Cust c

我不认为你能用FOR XML EXPLICIT得到这个,所以如果这是2000你就不走运了(就简单的解决方案而言).

猜你在找的MsSQL相关文章