我正在使用Microsoft sql Server 2005.
我正在为每个客户寻找一(1)行,其中AvailableAction字段是每个客户的所有操作的串联.
use tempdb GO IF DB_ID('myDatabase') IS NOT NULL DROP DATABASE myDatabase go CREATE DATABASE myDatabase GO USE myDatabase GO create table Cust( CustID Int Identity Primary Key,CustName Varchar(255) ) GO INSERT INTO Cust(CustName) values('One') INSERT INTO Cust(CustName) values('Two') GO CREATE TABLE Action( ActionID Int Identity(101,1) Primary Key,ActionName Varchar(128) ) GO INSERT INTO Action(ActionName) VALUES('Insert') INSERT INTO Action(ActionName) VALUES('Update') INSERT INTO Action(ActionName) VALUES('Delete') INSERT INTO Action(ActionName) VALUES('Print') GO create table CustAction( CustActionID Int Identity Primary Key,CustID Int,ActionID Int ) GO INSERT INTO CustAction(CustID,ActionID) VALUES(1,101) INSERT INTO CustAction(CustID,102) INSERT INTO CustAction(CustID,ActionID) VALUES(2,103) GO SELECT Cust.CustID,CustName,ActionName FROM CustAction JOIN Cust ON CustAction.CustID = Cust.CustID JOIN Action ON CustAction.ActionID = Action.ActionID GO SELECT Cust.CustID,'<option value="' + CAST(Action.ActionID AS Varchar) + '">' + ActionName + '</option>' AS AvailableAction FROM CustAction JOIN Cust ON CustAction.CustID = Cust.CustID JOIN Action ON CustAction.ActionID = Action.ActionID
我希望输出为:
CustID AvailableAction 1 <option value="101">Insert</option><option value="102">Update</option> 2 <option value="102">Update</option><option value="103">Delete</option>
解决方法
2005年
SELECT CustID,(SELECT ca.ActionID [@value],ActionName [text()] FROM dbo.CustAction ca INNER JOIN dbo.Action ON ca.ActionID = Action.ActionID WHERE ca.CustID = c.CustID FOR XML PATH('option'),TYPE) AvailableAction FROM dbo.Cust c
我不认为你能用FOR XML EXPLICIT得到这个,所以如果这是2000你就不走运了(就简单的解决方案而言).
原文地址:https://www.jb51.cc/mssql/83786.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。