0
votes

Comment diviser une table en un groupe de tables basé sur un critère?

Étant donné une table nommée "A" contienne les données suivantes

Table A: STRY> P>

type   name  age
-----------------
cat     d     2


5 commentaires

mysql ou sql-serveur ???


@Simoos. . . J'ai supprimé les balises de base de données incompatibles. Il n'y a pas de raison évidente de diviser une table en trois de cette façon. Pouvez-vous motiver ce que vous voulez accomplir?


Meilleur moyen de créer une table de type et de remplacer tous les types avec TYPETID


@Gordonlinoff Laissez-vous dire que j'ai un centre de soins d'animaux contenant du département qui ne gère qu'un seul type d'animal, mais j'ai une table de données de tous les animaux au centre. Et je dois envoyer à chaque département les seules données qu'ils concernaient.


@Simoos Pourquoi ne suffirait-il pas à interroger Tablea et filtrer sur la colonne de type pour chaque département?


5 Réponses :


0
votes

Bien en supposant que les autres tables ont déjà été créées, vous auriez juste besoin d'un insert dans ... Sélectionnez CODE>, E.G. pour TABLA1 CODE>:

INSERT INTO table1 (type, name, age)
SELECT type, name, age
FROM tableA
WHERE type = 'dog';


1 commentaires

J'ai déjà utilisé ça. Mais c'est pour toujours. ne nécessitant pas les erreurs.



1
votes

pourrait essayer d'utiliser Create View xxx


0 commentaires

0
votes

Je pense que vous devez écrire une procédure avec une boucle tandis que Itérateur sera le nombre de types. Ensuite, créez une table pour chaque type séparément avec les mêmes colonnes et insérez des données dans la table dans la boucle TIM.


0 commentaires

0
votes

Pourriez-vous essayer cela avec un Curseur code> et Sélectionnez dans CODE>:

DECLARE @Type VARCHAR(50);
DECLARE @TableCounter INT;
DECLARE @SQL VARCHAR(MAX);
DECLARE @TableName VARCHAR(20);

SET @TableCounter = 1;


DECLARE db_cursor CURSOR FOR 
SELECT DISTINCT type 
FROM Table_A

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @Type

WHILE @@FETCH_STATUS = 0  
BEGIN  
      PRINT @Type
      SET @TableName = CONCAT('Table_', @TableCounter)
      SET @SQL = 'SELECT * INTO '+ @TableName +' FROM Table_A WHERE Type = ''' + @Type+''''

      EXEC (@SQL)

      SET @TableCounter = @TableCounter + 1;

      FETCH NEXT FROM db_cursor INTO @Type 
END 

CLOSE db_cursor  
DEALLOCATE db_cursor 


0 commentaires

0
votes

Pour éviter la duplication de code et la création de tables inutiles, je créerais un UDF de valorisation de table forte> (fonction définie par l'utilisateur) qui prend les critères comme paramètre d'entrée ( type code> dans votre cas ) et renvoie la table d'origine filtrée en conséquence: xxx pré>

maintenant Vous pouvez appeler la fonction getnamebype code> avec différents type code> et vous pouvez l'utiliser En tant que table. P>

Query 1: P>

select * from GetNameByType('cat')


0 commentaires