2017-08-10 3 views
0

J'ai deux requêtes similaires.UNION plusieurs avec résultats

Comme vous avez choisi:

with CategoryHistory AS (
    SELECT 
    category.GUID as id, 
    ----HERE MANY FIELDS---- 
    category.__$operation AS operation, 
    map.tran_begin_time as beginT, 
    map.tran_end_time as endT 
    FROM cdc.fn_cdc_get_all_changes_dbo_EXT_BalanceHC_ZapasCategory(sys.fn_cdc_get_min_lsn('dbo_EXT_BalanceHC_ZapasCategory'), sys.fn_cdc_get_max_lsn(), 'all') AS category 
    INNER JOIN [cdc].[lsn_time_mapping] map 
     ON category.[__$start_lsn] = map.start_lsn 
    ) 
    SELECT operation, fields, valueses, beginT, endT FROM CategoryHistory 
    unpivot ([valueses] for fields in 
    (

    ----HERE MANY FIELDS---- 
))p 

Can i UNION des WITH résultats? Problème que je veux UNPIVOT certains champs du résultat de la requête.

+0

Oui, mais il pourrait y avoir des méthodes plus simples. Je suggère que vous fournissiez des exemples de données et les résultats souhaités. –

+0

J'utilise le CDC pour saisir des statistiques pour certaines tables. Les tableaux peuvent être liés mais ce n'est pas grave. Je veux créer une vue où unpivot certaines tables et les unir dans une table. – Seva

Répondre

1

Peut-être que vous voulez simplement quelque chose comme ceci:

SELECT ch.operation, ch.beginT, ch.endT, v.field, v.val 
FROM CategoryHistory ch cross apply 
    (values ('field1', field1), ('field2', field2), . . . 
    ) f(field, val); 

Je trouve cela plus facile que d'utiliser unpivot.

+0

Où dans cet exemple joindre avec une autre table? Dans mon cas 'CategoryHistory' est un alias ... – Seva

+0

@Seva. . . avant que la «croix s'applique». –