SQL Server循环查询

时间:2017-07-21 12:53:25

标签: sql sql-server

我在sql server中创建了这个视图,以组合多个列的2个记录的值。但是这个解决方案的问题是你需要为table2中的每一列提供concat。我想知道是否有可能用一个循环和一个动态变量为表2中的列号(table2中的列称为1,2,3,4,5 ......)执行concat部分。

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

我尝试过一些事情,但没有任何效果,任何想法?

1 个答案:

答案 0 :(得分: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)