0

tblClientとtblDBの2つのテーブルがあります。

CREATE TABLE tblBD(
[ID] INT PRIMARY KEY,
[DataBase] nVARCHAR (30) NOT NULL,
[ClientID] INT NOT NULL,
FOREIGN KEY ([ClientID]) REFERENCES tblClient(ID)
)

CREATE TABLE tblClient(
[ID] INT PRIMARY KEY,
[Name] nVARCHAR(30),
[Status] BIT,
[Number] INT,
)

クライアントごとにすべてのデータベースを取得する方法が必要です。

このようなもの :

Client1 Client2 ClientX
BD1     BD1     BD1 
BD2     BD2     BD2
BDX     BDX     BDX

このスクリプトを実行することで、1つのクライアントに対して簡単に実行できます。

Select tblBD.[DataBase] from tblBD
inner join tblCLient on tblBD.ClientID = tblClient.ID Where tblClient.ID = 1234

しかし、1つのテーブルですべてのクライアントの結果を取得する方法を理解できません。

ピボットの場合、集計関数を使用せずに結果を取得することはできません。

例 :

WITH T
AS (Select tblBD.[DataBase] as BD, tblClient.ID as ClientID from
tblBD inner join tblCLient on tblBD.ClientID = tblClient.ID)
SELECT *
FROM   T PIVOT ( 
max (BD) FOR ClientID IN ([1],[2],[3], [4])
) AS pvt

集計関数を使用せずにすべてのデータベースを取得したい。

4

1 に答える 1

1

まず第一に、私はこれからインスピレーションを得ました:

http://www.sqlmag.com/article/tsql3/pivoting-without-aggregation

次のスクリプトを実行して、クライアントの数を取得します。

SELECT COUNT( DISTINCT tblBD.ClientID) FROM tblBD

必要な数のクライアントを作成した後。

私の場合、4つのクライアントの例:

SELECT [1] AS Client1, [2] AS Client2, [3] AS Client3, [4] AS Client4
FROM
(
    Select tblBD.[DataBase] AS BD,
    tblBD.ClientID AS ClientID ,
    ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY ClientID) AS RowNum 
    FROM tblBD
) Piv
PIVOT (MAX(BD) FOR ClientID IN ([1],[2],[3], [4])) AS pvt 

必要な数のクライアントを含むクエリ文字列をコードに組み込むことができます。

于 2012-07-06T12:20:43.760 に答える