1

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,ActionID) VALUES(1,102)
INSERT INTO CustAction(CustID,ActionID) VALUES(2,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,CustName,
'<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>
4

2 に答える 2

3

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 の場合、(単純な解決策に関する限り)運が悪いです。

于 2010-07-07T18:41:46.970 に答える
1

これは、SQL Server XML を知っている人ならきっとうまくいく方法です。

 SELECT CustID  ,
       CustName,
       REPLACE(REPLACE(
       ( SELECT '<option value="' + CAST(ACTION.ActionID AS VARCHAR) + '">' + ActionName + '</option>'
       FROM    ACTION
               JOIN CustAction
               ON      CustAction.CustID = Cust.CustID
       WHERE   CustAction.ActionID       = ACTION.ActionID FOR XML PATH('')
       )
       ,'&lt;','<'),'&gt;','>') AvailableAction
FROM   Cust
于 2010-07-07T18:30:10.750 に答える