2017-09-06 24 views
0

如何将'union'用于以下两个查询?还是有其他解决方案吗?它们都成功运行并返回我期望的结果集。它们具有相同数量的列(使用相同的表和相同的数据类型),但在case语句和“where”子句中有所不同。如何将两个结果集合成相同的列,但不同的case语句和where子句

SELECT TOP 720 
      ind_first_name AS [First Name], 
      ind_last_name AS [Last Name], 
      cst_recno AS [Member ID], 
      cst_eml_address_dn AS [Email Address], 
      adr_city AS City, 
      adr_state AS [State], 
      adr_country AS Country, 
      cst_org_name_dn AS Company, 
      cst_ixo_title_dn AS [Job Title], 
CASE 
WHEN mem_member_product LIKE '%Stud%' 
     THEN 'Associate Student' 
ELSE 'Exclude' 
END AS [Member Type] 
    FROM co_individual 
    INNER JOIN co_individual_ext ON ind_cst_key_ext = ind_cst_key 
    INNER JOIN co_customer ON cst_key = ind_cst_key 
     AND ind_delete_flag=0 
     AND ind_deceased_flag=0 
    LEFT JOIN co_customer_x_address ON cst_cxa_key = cxa_key 
    LEFT JOIN co_address ON adr_key = cxa_adr_key 
    LEFT JOIN vw_client_uli_member_type ON cst_key = mem_cst_key 
    WHERE mem_member_type IS NOT NULL and mem_expire_date >= 9/7/2017 and mem_member_product LIKE '%Stud%' 
    AND adr_country = N'UNITED STATES' 
    AND ind_deceased_flag != 1 
    AND ind_key_leader_flag_ext != 1 
    AND ind_int_code != N'Staff' 
    AND ind_int_code != N'Spouse' 
    AND ind_int_code != N'Press' 
    order by newid() 


SELECT TOP 80 
      ind_first_name AS [First Name], 
      ind_last_name AS [Last Name], 
      cst_recno AS [Member ID], 
      cst_eml_address_dn AS [Email Address], 
      adr_city AS City, 
      adr_state AS [State], 
      adr_country AS Country, 
      cst_org_name_dn AS Company, 
      cst_ixo_title_dn AS [Job Title], 
CASE 
WHEN Mem_member_type in ('Full Under 35 Sustaining','Full Member') and ind_age_cp <= '35' 
     THEN 'Full Member Under 35' 
ELSE 'Exclude' 
END AS [Member Type] 
    FROM co_individual 
    INNER JOIN co_individual_ext ON ind_cst_key_ext = ind_cst_key 
    INNER JOIN co_customer ON cst_key = ind_cst_key 
     AND ind_delete_flag=0 
     AND ind_deceased_flag=0 
    LEFT JOIN co_customer_x_address ON cst_cxa_key = cxa_key 
    LEFT JOIN co_address ON adr_key = cxa_adr_key 
    LEFT JOIN vw_client_uli_member_type ON cst_key = mem_cst_key 
    WHERE mem_member_type IS NOT NULL and mem_expire_date >= 9/7/2017 and mem_member_type in ('Full Under 35 Sustaining','Full Member') and ind_age_cp <= '35' 
    AND adr_country = N'UNITED STATES' 
    AND ind_deceased_flag != 1 
    AND ind_key_leader_flag_ext != 1 
    AND ind_int_code != N'Staff' 
    AND ind_int_code != N'Spouse' 
    AND ind_int_code != N'Press' 
     order by newid() 

谢谢。

+1

以及会发生什么,当你的工会呢? – ADyson

回答

0

你应该能够只是把UNION两个查询之间,包住整个事情在括号中,给它一个别名,并从中选择:

Select * from 
(
SELECT TOP 720 
     ind_first_name AS [First Name], 
     ind_last_name AS [Last Name], 
     cst_recno AS [Member ID], 
     cst_eml_address_dn AS [Email Address], 
     adr_city AS City, 
     adr_state AS [State], 
     adr_country AS Country, 
     cst_org_name_dn AS Company, 
     cst_ixo_title_dn AS [Job Title], 
     CASE 
      WHEN mem_member_product LIKE '%Stud%' 
       THEN 'Associate Student' 
      ELSE 'Exclude' 
     END AS [Member Type] 
FROM co_individual 
INNER JOIN co_individual_ext ON ind_cst_key_ext = ind_cst_key 
INNER JOIN co_customer ON cst_key = ind_cst_key 
    AND ind_delete_flag=0 
    AND ind_deceased_flag=0 
LEFT JOIN co_customer_x_address ON cst_cxa_key = cxa_key 
LEFT JOIN co_address ON adr_key = cxa_adr_key 
LEFT JOIN vw_client_uli_member_type ON cst_key = mem_cst_key 
WHERE mem_member_type IS NOT NULL and mem_expire_date >= '9/7/2017' and mem_member_product LIKE '%Stud%' 
AND adr_country = N'UNITED STATES' 
AND ind_deceased_flag != 1 
AND ind_key_leader_flag_ext != 1 
AND ind_int_code != N'Staff' 
AND ind_int_code != N'Spouse' 
AND ind_int_code != N'Press' 
order by newid() 

UNION 

SELECT TOP 80 
     ind_first_name AS [First Name], 
     ind_last_name AS [Last Name], 
     cst_recno AS [Member ID], 
     cst_eml_address_dn AS [Email Address], 
     adr_city AS City, 
     adr_state AS [State], 
     adr_country AS Country, 
     cst_org_name_dn AS Company, 
     cst_ixo_title_dn AS [Job Title], 
     CASE 
      WHEN Mem_member_type in ('Full Under 35 Sustaining','Full Member') and ind_age_cp <= '35' 
       THEN 'Full Member Under 35' 
      ELSE 'Exclude' 
     END AS [Member Type] 
FROM co_individual 
INNER JOIN co_individual_ext ON ind_cst_key_ext = ind_cst_key 
INNER JOIN co_customer ON cst_key = ind_cst_key 
    AND ind_delete_flag=0 
    AND ind_deceased_flag=0 
LEFT JOIN co_customer_x_address ON cst_cxa_key = cxa_key 
LEFT JOIN co_address ON adr_key = cxa_adr_key 
LEFT JOIN vw_client_uli_member_type ON cst_key = mem_cst_key 
WHERE mem_member_type IS NOT NULL and mem_expire_date >= 9/7/2017 and mem_member_type in ('Full Under 35 Sustaining','Full Member') and ind_age_cp <= '35' 
AND adr_country = N'UNITED STATES' 
AND ind_deceased_flag != 1 
AND ind_key_leader_flag_ext != 1 
AND ind_int_code != N'Staff' 
AND ind_int_code != N'Spouse' 
AND ind_int_code != N'Press' 
    order by newid() 
) as Unioned_Query 
+0

这是一条评论而不是答案 – FLICKER

+1

这是一条指令形式的答案,而不是“这里是你的代码”的形式。 – Brian

+0

谢谢Brian。它工作得很好。我注意到我的结果集中有一些重复项。有没有办法在该查询的顶部添加一个独特的函数来抽取所有唯一的[成员ID]? @Brian – klima