0
테이블 2 개, tblClient 및 tblDB가 있습니다.내부 피벗 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
문제는 in n 클라이언트를 가질 수 있다는 것입니다. 그래서 나는 그것을 harcode 수 없습니다. 나는 vb.net에서 그것을 Codding입니다. 내 응용 프로그램 전체 테이블을 제공하는 것을 선호합니다. 내 응용 프로그램에서 각 클라이언트를 관리하고 싶지 않습니다. – billybob
예 매우 일반적인 문제입니다. 이미 많은 비슷한 질문/해결책이 있어야합니다. – mellamokb