Group_Concat
SQL Serverの mySQL に似たものが必要なようですね。
各 companyid が個別の列にあるようにこれを行う方法を探している場合、動的 SQL を使用することは多少困難になります。どの時点で、これをアプリケーションに返し、独自のロジック内で必要なものを処理させる方が簡単でしょうか?
ところで、あなたが疑問に思っている場合、動的 SQL ロジックは次のようになります...それがどれほど厄介であるかに注意してください...したがって、なぜ私はそれに反対することを提案します.
select @highestCount = max(count(*))
from employeeCompany
group by Employeeid
declare createtemptable varchar(max), @filltableselect varchar(max), @filltablejoin varchar(max)
declare @currentCount int
set @currentCount = 0
set @createtemptable = 'CREATE TABLE #Temp (EmployeeID INT'
set @filltableselect = 'INSERT INTO #Temp SELECT EmployeeCompany0.EmployeeID, EmployeeCompany0.CompanyID'
set @filltablejoin = 'FROM EmployeeCompany AS EmployeeCompany0'
while(@currentCount < @highestCount)
begin
set @createtemptable = @createtemptable + ', CompanyID'
+ CAST(@currentCount AS VARCHAR(2)) + ' INT'
if(@currentCount > 0)
begin
set @filltableselect = @filltableselect + ', EmployeeCompany'
+ CAST(@currentCount AS VARCHAR(2)) + '.CompanyId'
set @filltablejoin = @filltablejoin
+ 'LEFT JOIN EmployeeCompany AS EmployeeCompany'
+ CAST(@currentCount AS VARCHAR(2))
+ ' ON EmployeeCompany0.EmployeeID = EmployeeCompany'
+ CAST(@currentCount AS VARCHAR(2)) + '.EmployeeID'
end
set @currentCount = @currentCount + 1
end
set @createtemptable = @createtemptable + ')'
--This next line can be whatever you need it to be
set @filltablejoin = @filltablejoin + 'WHERE employeeCompany0.EmployeeID = 1'
exec @createtemptable
exec @filltableselect + @filltablejoin