0
我有2個表,tblClient和tblDB。Inner Join Pivot SQL
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
我可以通過執行這個腳本很容易做到這一點對一個客戶端:
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
我想所有的數據庫,而無需使用聚合函數。
你可以用PIVOT做到這一點,但是你需要一個硬編碼的頭部客戶端名稱列表,或者動態生成帶有動態SQL或應用程序語言的列表。你不能在應用程序而不是數據庫中佈置數據嗎? – mellamokb 2012-07-05 15:18:20
問題是可以有n個客戶。所以我無法對它進行編碼。我在vb.net中對它進行了編碼。我更願意將我的應用程序放在整個表格中。我不想爲我的應用程序中的每個客戶端進行管理。 – billybob 2012-07-05 15:19:32
是的,這是一個非常普遍的問題。 SO上應該有許多類似的問題/解決方案。 – mellamokb 2012-07-05 15:20:39