分类：电脑/网络-程序设计
问题：这个sql语句应该怎么写表结构和数据如下col1|col2|co 
表结构据如下col1 | col2 | col3 | col4--------------------------1    | a    | 200  | 1    | a    | 300  | 10501    | b    | 200  | 10301    | b    | 300  | 1    | c    | 200  |1    | c    | 300  |2    | a    | 200  | 2    | a    | 300  | 2    | b    | 200  | 2表结构据如下col1 | col2 | col3 | col4--------------------------1    | a    | 200  | 1    | a    | 300  | 10501    | b    | 200  | 10301    | b    | 300  | 1    | c    | 200  |1    | c    | 300  |2    | a    | 200  | 2    | a    | 300  | 2    | b    | 200  | 2    | b    | 300  | 10302    | c    | 200  | 10502    | c    | 300  |预想结果：以col1和col2为唯一，如果col4不为空，则取出该条数据；如果col4为空，则取col3=200的数据。比如这两条数据：col1 | col2 | col3 | col4--------------------------1    | a    | 200  | 1    | a    | 300  | 1050取出col4不为空的那条，也就是 col1 | col2 | col3 | col4--------------------------1    | a    | 300  | 1050而col1 | col2 | col3 | col4--------------------------1    | c    | 200  |1    | c    | 300  |则取出col1 | col2 | col3 | col4--------------------------1    | c    | 200  |以以上数据为例，最终取出的结果应该为：col1 | col2 | col3 | col4--------------------------1    | a    | 300  | 10501    | b    | 200  | 10301    | c    | 200  |2    | a    | 200  | 2    | b    | 300  | 10302    | c    | 200  | 1050
回答：SELECT col1, col2 , col3 , col4
FROM 表
WHERE (ISNULL(col4, 0) <> 0)
union all
SELECT col1, col2 , col3 , col4
FROM 表
WHERE ((CONVERT(varchar(10), col1) + col2) NOT IN
          ((SELECT DISTINCT CONVERT(varchar(10), col1) + col2
          FROM 表
          WHERE (ISNULL(col4, 0) <> 0)))) AND (col3 = 200)