fusion de trois tables dans un Napp: ID, Fielda, Fieldb, FieldC, .... P> Li>
Je recherche un Répétez cette opération jusqu'à sélectionner tous les enregistrements des trois tables. P>
Si une table comporte moins d'enregistrements ou ne répond pas aux critères, ignorez et continuez avec d'autres. P>
Ma tentative: p>
Je l'ai fait totalement par voie de programmation, comme des curseurs et des Cela fait de retard. P> Sélectionnez CODE> Query par règle 3, 2, 1 enregistrements de chaque tableau comme suit: p>
ID code>: numéro automatique dans chaque table p> li>
Fielda code> sera unique dans les trois tables. LI>
ul>
Sélectionnez CODE> Query pour fusionner trois tables comme suit: p>
Tablea Code> triés par ID LI>
tableb code> triés par ID LI>
Napp CODE> Trié par ID LI>
ul>
si code> conditions dans une procédure stockée SQL Server. P>
4 Réponses :
Il n'y a pas beaucoup d'informations à utiliser ici, mais je suppose que vous pouvez utiliser Union pour combiner plusieurs déclarations. exécuter et voir si cela fonctionne. p> / AF p> p>
Cette question concerne (Microsoft) SQL Server B> - et ni SQL Server, ni la norme ANSI / ISO SQL connaissent une limite limite code> .....
Merci pour la note! @marc_s
Ceci nécessite une formule qui prend des numéros de ligne à partir de chaque table et la transforme en une série d'entiers qui sautent les valeurs souhaitées.
Dans la requête ci-dessous, j'ajoute du CTE pour le bien de raccourcir la formule. La vraie magie est dans le Union code>. En outre, j'ajoute un champ supplémentaire pour votre contrôle. N'hésitez pas à vous en débarrasser. P> WITH A_Aux as (
SELECT 'A' As FromTable, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum, TableA.*
FROM TableA
), B_Aux AS (
SELECT 'B' As FromTable, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum, TableB.*
FROM TableB
), C_Aux AS (
SELECT 'C' As FromTable, ROW_NUMBER() OVER (Order BY ID) AS RowNum, TableC.*
FROM TableC
)
SELECT *
FROM (
SELECT RowNum+3*FLOOR((RowNum-1)/3) As ColumnForOrder, A_Aux.* FROM A_Aux
UNION ALL
SELECT 3+RowNum+4*FLOOR((RowNum-1)/2), B_Aux.* FROM B_Aux
UNION ALL
SELECT 6*RowNum, C_Aux.* FROM C_Aux
) T
ORDER BY ColumnForOrder
C'est beaucoup mieux jusqu'à maintenant.
Vous pouvez essayer ceci ..
GO
select * into #temp1 from (select * from table1) as t1
select * into #temp2 from (select * from table2) as t2
select * into #temp3 from (select * from table3) as t3
select * into #final from (select col1, col2, col3 from #temp1 where 1=0) as tb
declare @i int
set @i=1
while( (select COUNT(*) from #temp1)>@i)
Begin
;with ct1 as (
select ROW_NUMBER() over (order by id) as Slno, * from #temp1
),ct2 as (
select ROW_NUMBER() over (order by id) as Slno, * from #temp2
),ct3 as (
select ROW_NUMBER() over (order by id) as Slno, * from #temp3
),cfinal as (
select top 3 * from #temp1
union all
select top 2 * from #temp2
union all
select top 1 * from #temp3
)
insert into #final ( col1 , col2, col3 )
select col1, col2, col3 from cfinal
delete from #temp1 where id in (select top 3 ID from #temp1)
delete from #temp2 where id in (select top 2 ID from #temp2)
delete from #temp3 where id in (select top 1 ID from #temp3)
set @i = @i+1
End
Select * from #final
Drop table #temp1
Drop table #temp2
Drop table #temp3
GO
De ma compréhension, je crée trois tables Temps comme Ta, TB, TC. Si des tables correspondent à vos tables, la sortie ressemble à laisse-moi expliquer le t- SQL:
Avant cela, fyr: NTILE et numéro de rang p> a, a, a, b, b, c, a, a, b, b, c, a , B, c, c, c code> p>
commander par
Qu'est-ce que tu as essayé jusque-là?
@iminiki fabriquez une table TMP remplie de 1000 identifiants ou de nombres totaux de trois tables, puis à l'aide de curseur SQL, tandis que la boucle, si des conditions et des variables ont rempli de table TMP et utilisez la dernière requête.
Le curseur est-il accepté pour votre processus.
Si des tables contiennent 7 lignes, alors que doit-on votre sortie?
Tablea, Tablea, Tablea, Tableb, Tableb, Tableau, Tablea, Tablea, Tablea, Tableb, Tableau, Tableau, Tableb, Tableb, Tableb, Tableb, Tableb, Tableb, Tableb, Tableau, Nappe, Napper ,