简体   繁体   中英

How to avoid adding multiple NULL values when performing UNION?

I need to combine sql query result with another two record. I need few column values but rest of them can be NULL. The Columns are more than twenty five in a table. Now i can add manually like this.

--For e.g. Consider this query

SELECT (....)

UNION

SELECT '2',NULL,'418G',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,  
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','0',NULL,NULL

UNION

SELECT '3',NULL,'710h',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,  
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','0',NULL,NULL

If i join only the required column with values like the below then i get error.

UNION
SELECT '2' as Category,'418G' as Col3,'0' as Col9,'0' as Col12
UNION
SELECT '3' as Category,'701G' as Col3,'0' as Col9, '0' as Col12

Error: 
Msg 205, Level 16, State 1, Line 1
All queries combined using a UNION, INTERSECT or EXCEPT operator must have an 
equal number of expressions in their target lists.

my question is,

Is there any way to add these NULL values by any simple way, instead of writing whole query with these NULL values. As you noticed i need value for 1st, 3rd and 3rd and 4th last columns. This can vary from report to report. Also the columns order can be different but for sure i need some random NULL values where i don't care about any values.

The main SELECT query in the first part is a result of 2 tables by INNER JOIN, then i want to add these values with NULL.

Any idea will be appreciated.

Thanks

Yes. It's possible. Sort of. But you'll likely end up writing more code unless you have a LOT of UNIONs.

Define a table variable that matches the output. Insert your static data into it and union with it.

Such as...

declare @static table (
    c1 nvarchar(max),
    c2 nvarchar(max),
    c3 nvarchar(max),
    c4 nvarchar(max),
    c5 nvarchar(max),
    c6 nvarchar(max),
    c7 nvarchar(max),
    c8 nvarchar(max),
    c9 nvarchar(max),
    c10 nvarchar(max),
    c11 nvarchar(max),
    c12 nvarchar(max),
    c13 nvarchar(max),
    c14 nvarchar(max),
    c15 nvarchar(max),
    c16 nvarchar(max),
    c17 nvarchar(max),
    c18 nvarchar(max),
    c19 nvarchar(max),
    c20 nvarchar(max),
    c21 nvarchar(max),
    c22 nvarchar(max),
    c23 nvarchar(max),
    c24 nvarchar(max),
    c25 nvarchar(max),
    c26 nvarchar(max),
    c27 nvarchar(max),
    c28 nvarchar(max),
    c29 nvarchar(max),
    c30 nvarchar(max),
    c31 nvarchar(max),
    c32 nvarchar(max),
    c33 nvarchar(max),
    c34 nvarchar(max),
    c35 nvarchar(max),
    c36 nvarchar(max),
    c37 nvarchar(max),
    c38 nvarchar(max),
    c39 nvarchar(max),
    c40 nvarchar(max),
    c41 nvarchar(max),
    c42 nvarchar(max),
    c43 nvarchar(max),
    c44 nvarchar(max),
    c45 nvarchar(max),
    c46 nvarchar(max),
    c47 nvarchar(max),
    c48 nvarchar(max),
    c49 nvarchar(max),
    c40 nvarchar(max),
    c51 nvarchar(max),
    c52 nvarchar(max),
    c53 nvarchar(max),
    c54 nvarchar(max),
    c55 nvarchar(max),
    c56 nvarchar(max),
    c57 nvarchar(max),
    c58 nvarchar(max),
    c59 nvarchar(max),
    c60 nvarchar(max),
    c61 nvarchar(max),
    c62 nvarchar(max)
)

insert @static (c1, c3, c59, c60) values ('1','418G','0','0')
insert @static (c1, c3, c59, c60) values ('2','710G','0','0')

select [...]
union
select * from @static

While this doesn't completely avoid the problem, you can make sure you only have to type the NULL s once by using a subselect:

SELECT (....)
UNION
SELECT Category,NULL,Col3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,  
  NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
  NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,Col9,Col12,NULL,NULL
FROM (
  SELECT '2' as Category,'418G' as Col3,'0' as Col9,'0' as Col12
  UNION
  SELECT '3' as Category,'701G' as Col3,'0' as Col9,'0' as Col12
) AS sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM