0
votes

Ajouter des membres manquants à une table d'une autre table SQL Server

J'ai 2 tables:

la première table est [Table_Time]: P>

Product         Store           Month Number    Week Number
------------    -----------     ------------    -----------
P1              ST1             1               01
P1              ST1             1               02
P1              ST1             1               03
P1              ST1             1               04
P1              ST1             2               05
P1              ST1             2               06
P1              ST1             2               07
P1              ST1             2               08
P1              ST1             3               09
P1              ST1             3               10
P1              ST1             3               11
P1              ST1             3               12


4 commentaires

et où obtenez-vous les valeurs pour produit et Store lorsque vous ajoutez les lignes manquantes dans Ventes ?


Pourquoi dupliquer la date ici? Y a-t-il plus de colonnes dans votre table ventes nous ne savons pas? Si cela est simplement pour une requête, avez-vous besoin de stocker les semaines de valeur zéro, lorsque vous pourriez contracter les données avec `croisez-vous» entre votre table de temps et des tables de produits / magasin?


J'ai des ventes pour ces semaines, mais j'ai besoin de la valeur 0 pour les disparus ...


D'où vient cette valeur? Je ne peux pas le voir dans votre résultat attendu. Je pense que vous devez expliquer mieux votre problème et ce dont vous avez besoin


3 Réponses :


2
votes

Vous pouvez faire un insert avec un "antijoindre", comme dans: xxx


3 commentaires

Considérez que j'ai x produits et x magasins sur la table [Ventes]


Non, c'est une syntaxe invalide pour SQL Server. Pour plusieurs colonnes, nous devons utiliser Exist .


@Guidog j'ai oublié que SQL Server ne prend pas en charge les tuples. Changé en un antijoindre typique maintenant.



1
votes

Voici une façon de le faire, vous devez créer un produit cartésien entre vos produits et vos dates. Utilisation de sauf code> Vous ne pouvez apporter que les valeurs nécessaires pour que vous puissiez les insérer dans votre table de vente.

WITH AllProducts AS( --This can be avoided if you already have a list of them outside of Sales
    SELECT DISTINCT Product, Store
    FROM Sales
)
SELECT p.Product,
       p.Store,
       t.MonthNumber,
       t.WeekNumber
FROM AllProducts p
CROSS JOIN Table_Time t
EXCEPT
SELECT s.Product,
       s.Store,
       s.MonthNumber,
       s.WeekNumber
FROM Sales s;


0 commentaires

1
votes

En supposant que vous avez une table de stockage et de produit, il suffit d'utiliser comme code> joindre rejoindre code>: xxx pré>

Si vous souhaitez que vous puissiez ajouter un à gauche Joindre code> à votre Ventes CODE> Table: P>

SELECT TT.MonthNumber,
       TT.MonthNumber,
       P.ProductID,
       S.StoreID,
       COUNT(SS.ID) 
FROM Table_time TT
     CROSS JOIN Product P
     CROSS JOIN Store S
     LEFT JOIN Sales SS ON TT.MonthNumber = SS.MonthNumber
                       AND TT.WeekNumber = SS.WeekNumber
                       AND P.ProductID = SS.ProductID
                       AND S.StoreID = SS.StoreID;


0 commentaires