2017-07-21 108 views
0

我在sql server中製作了這個視圖來合併多列2條記錄的值。但是這個解決方案的問題在於你需要爲table2中的每一列創建一個concat。我想知道是否可以對table2的列號(table2中的列稱爲1,2,3,4,5 ....)使用循環和動態變量來執行concat部分。SQL Server循環查詢

SELECT 
dbo.table1.lot_id AS lot, 
dbo.table1.hybird_id AS hybrid, 

concat( 
    LEFT((SELECT dbo.table2.[1] FROM dbo.table2 WHERE dbo.table2.parentals_id = dbo.table1.parental_male_id AND dbo.table2.lot_id = dbo.table1.lot_id) , 1), 
    LEFT((SELECT dbo.table2.[1] FROM dbo.table2 WHERE dbo.table2.parentals_id = dbo.table1.parental_female_id AND dbo.table2.lot_id = dbo.table1.lot_id) , 1) 
) AS '1', 

--above concat x31 times more 

FROM dbo.table2 
INNER JOIN dbo.table1 ON dbo.table2.lot_id = dbo.table1.lot_id 
GROUP BY dbo.table1.lot_id, dbo.table1.hybird_id, 
dbo.table1.parental_male_id, 
dbo.table1.parental_female_id 

我嘗試了幾件事,但沒有任何工作,任何想法?

+2

MySQL不能也SQL-Server中。請標記正確的rdbms。你可以用動態SQL做到這一點。但是,大紅旗在這裏就是爲什麼你需要連接表中的所有列來開始。 –

+2

如果這將是一個視圖,你只需要輸入一次。這可能需要的時間少於嘗試聰明。 –

+0

爲什麼你需要子查詢開始?你可以發佈樣本數據和預期產出嗎? – scsimon

回答

0

試圖簡化它一下,那種

SELECT lot, hybrid, parental_male_id, parental_female_id 
    concat(Left(m.[1],1), left(f.[1], 1)) AS [1] 
    --,.. 
FROM (
    SELECT dbo.table1.lot_id AS lot 
     , dbo.table1.hybird_id AS hybrid 
     , dbo.table1.parental_male_id 
     , dbo.table1.parental_female_id 
    FROM dbo.table2 
    INNER JOIN dbo.table1 ON dbo.table2.lot_id = dbo.table1.lot_id 
    GROUP BY dbo.table1.lot_id, dbo.table1.hybird_id, 
     dbo.table1.parental_male_id, 
     dbo.table1.parental_female_id 
    ) t 
JOIN dbo.table2 m ON m.parentals_id = t.parental_male_id AND m.lot_id = lot) 
JOIN dbo.table2 f ON f.parentals_id = t.parental_female_id AND f.lot_id = lot)