-4

我有来自同一张表的三个查询输出。但必须将所有 3 合并到单个 mysql 查询

actual query:
select SKU_VARIANT1_VALCD, SKU_VARIANT1_VALUE_DESC,SKU_VARIANT2_VALCD, SKU_VARIANT2_VALUE_DESC,MIN_LOT_PRICE,MAX_LOT_PRICE
from(
select SKU_VARIANT1_VALCD, SKU_VARIANT1_VALUE_DESC, '' SKU_VARIANT2_VALCD, '' SKU_VARIANT2_VALUE_DESC,'' MIN_LOT_PRICE,'' MAX_LOT_PRICE -- null,null-- ,SKU_VARIANT2_VALCD,SKU_VARIANT2_VALUE_DESC
  FROM lot_table
  group by SKU_VARIANT1_VALCD 
 union all
 select '' SKU_VARIANT1_VALCD,'' SKU_VARIANT1_VALUE_DESC, SKU_VARIANT2_VALCD, SKU_VARIANT2_VALUE_DESC,'' MIN_LOT_PRICE,'' MAX_LOT_PRICE
  FROM lot_table
  group by SKU_VARIANT2_VALCD
 union all
 select '' SKU_VARIANT1_VALCD, '' SKU_VARIANT1_VALUE_DESC, '' SKU_VARIANT2_VALCD, '' SKU_VARIANT2_VALUE_DESC, MIN(LOT_PRICE) MIN_LOT_PRICE,  MAX(LOT_PRICE)  MAX_LOT_PRICE
  FROM lot_table
 ) a;


output getting using union (actual output):

SKU_VARIANT1_VALCD  SKU_VARIANT1_VALUE_DESC SKU_VARIANT2_VALCD  SKU_VARIANT2_VALUE_DESC MIN_LOT_PRICE   MAX_LOT_PRICE
------------------  ----------------------- ------------------  ----------------------- -------------   -------------
1   WHIITE              
12  Yellow              
15  Tan             
2   Black               
43  Olive               
5   Off White               
50  Blue                
51  Blue                
52  Blue                
56  Navy Blue               
6   GREY STONE              
70  Rust                
8   Off White               
80  Beige               
81  Pink                
85  Beige               
87  Pink                
88  Magenta             
BL  Blue                
C0002   Beige               
C0042   BLACK               
C0046   Tan             
C0092   Tan             
C0123   Brown               
OR  Gold                
PL  Metallic                
TG  Grey                
TM  Blue                
TN  Black               
TO  Navy Blue               
                                            20                  20      
                                            21                  21      
                                            23                  23      
                                            32                  32      
                                            34                  34      
                                            36                  36      
                                            37                  37      
                                            38                  38      
                                            39                  39      
                                            40                  40      
                                            41                  41      
                                            42                  42      
                                            99                  99      
                                            S0004               44      
                                            S0017               24/XXL      
                                            S0036               19      
                                            S0037               22      
                                                                                        590             6590


expected output:

SKU_VARIANT1_VALCD  SKU_VARIANT1_VALUE_DESC  SKU_VARIANT2_VALCD  SKU_VARIANT2_VALUE_DESC    MIN_LOT_PRICE   MAX_LOT_PRICE
------------------  -----------------------  ------------------  -----------------------    -------------   -------------
1                   WHIITE                  20                  20                      590             6590
12                  Yellow                  21                  21      
15                  Tan                     23                  23      
2                   Black                   32                  32      
43                  Olive                   34                  34      
5                   Off White               36                  36      
50                  Blue                    37                  37      
51                  Blue                    38                  38      
52                  Blue                    39                  39      
56                  Navy Blue               40                  40      
6                   GREY STONE              41                  41      
70                  Rust                    42                  42      
8                   Off White               99                  99      
80                  Beige                   S0004               44      
81                  Pink                    S0017               24/XXL      
85                  Beige                   S0036               19      
87                  Pink                    S0037               22      
88                  Magenta             
BL                  Blue                
C0002               Beige               
C0042               BLACK               
C0046               Tan             
C0092               Tan             
C0123               Brown               
OR                  Gold                
PL                  Metallic                
TG                  Grey                
TM                  Blue                
TN                  Black               
TO                  Navy Blue               

所有三个输出都是不同的值,彼此没有关系。我只需要把它相互平行。我尝试使用 union with the 3 quires 的实际输出,但没有达到预期的结果。

提前致谢,,,,

4

2 回答 2

2

如果只是为了并排显示它们,您可以分配ROW_NUMBER()每个查询并使用它。JOIN像下面这样的查询:

SELECT SKU_VARIANT1_VALCD, SKU_VARIANT1_VALUE_DESC,
       SKU_VARIANT2_VALCD, SKU_VARIANT2_VALUE_DESC,
       MIN_LOT_PRICE, MAX_LOT_PRICE 
 FROM
(SELECT SKU_VARIANT1_VALCD, SKU_VARIANT1_VALUE_DESC, ROW_NUMBER() OVER (ORDER BY SKU_VARIANT1_VALCD) rnum
FROM lot_table WHERE SKU_VARIANT1_VALCD IS NOT NULL
GROUP BY SKU_VARIANT1_VALCD) A 
LEFT JOIN
(SELECT SKU_VARIANT2_VALCD, SKU_VARIANT2_VALUE_DESC, ROW_NUMBER() OVER (ORDER BY SKU_VARIANT2_VALCD) rnum
FROM lot_table WHERE SKU_VARIANT2_VALCD IS NOT NULL
GROUP BY SKU_VARIANT2_VALCD) B ON A.rnum=B.rnum
LEFT JOIN
(SELECT MIN(LOT_PRICE) MIN_LOT_PRICE,  MAX(LOT_PRICE)  MAX_LOT_PRICE, ROW_NUMBER() OVER (ORDER BY SKU_VARIANT2_VALCD) rnum
 FROM lot_table) C ON A.rnum=C.rnum;

连同这个小提琴演示示例

于 2020-08-26T09:31:12.357 回答
0

你能提供你的lot_table的表结构吗?

我猜你的 lot_table 有以下结构:

SKU_VARIANT1_VALCD, 
SKU_VARIANT1_VALUE_DESC,
SKU_VARIANT2_VALCD, 
SKU_VARIANT2_VALUE_DESC,
LOT_PRICE

我是根据您发布的实际查询做出这个推断的。

看起来您想找到variant1 和variant2 组合的最低手价和最高手价。这个对吗?

如果是的话,你为什么甚至需要一个联合工会?一个简单的分组查询不应该为您工作吗?如果我上面提到的表结构是正确的,这就是我会做的。

select 
  SKU_VARIANT1_VALCD, 
  SKU_VARIANT1_VALUE_DESC, 
  SKU_VARIANT2_VALCD, 
  SKU_VARIANT2_VALUE_DESC, 
  MIN(LOT_PRICE) MIN_LOT_PRICE,
  MAX(LOT_PRICE) MAX_LOT_PRICE
from lot_table
group by SKU_VARIANT1_VALCD, 
  SKU_VARIANT1_VALUE_DESC, 
  SKU_VARIANT2_VALCD, 
  SKU_VARIANT2_VALUE_DESC;
于 2020-08-25T07:53:27.670 回答