2017-07-21 113 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)