作者:华东师大中北文艺部 | 来源:互联网 | 2023-08-22 10:25
问题
|
楼主发表于:2010-03-26 10:32:53
表A tid 湖北 湖南 广东 1 001 002 003 2 001 002 003 3 001 002 null 4 001 null 003 5 001 na 003 .... 表B tid address 状态 1 湖北 test 1 湖南 null 1 广东 test
2 湖北 na 2 湖南 null 2 广东 test
3 湖北 test 3 湖南 test 3 广东 test
4 湖北 null 4 湖南 test 4 广东 null
5 湖北 test 5 湖南 test 5 广东 na
下面要求表C
表C: tid address 状态 1 湖南 null 2 湖北 na 2 湖南 null 4 湖北 null 4 广东 null 4 广东 na
逻辑:表A和表B中TID是关联字段,现在要求 表A中列有值(na或者null都是无值的)表B中TID所对应的行中状态列没有值的数据 表A中的列对应表B中的行 表A中每一列代表表B中一行
求SQL 列转行 通过A,B表求C表
逻辑有点复杂,有不明白的,我再补充说明。
|
|
最佳回答
代码
1 CREATE TABLE #TEST_A (TID CHAR(2),ADDRESS CHAR(10),STATUS CHAR(10))
2 INSERT INTO #TEST_A
3 SELECT TID, '湖北', 湖北 FROM A
4 INSERT INTO #TEST_A
5 SELECT TID, '湖南', 湖南 FROM A
6 INSERT INTO #TEST_A
7 SELECT TID, '广东', 广东 FROM A
8 --如果数据太多,可以使用动态的。
9
10 SELECT B.TID,B.ADDRESS,B.状态
11 FROM B
12 INNER JOIN #TEST_A
13 ON #TEST_A.TID=B.TID
14 AND #TEST_A.ADDRESS = B.ADDRESS
15 AND (#TEST_A.STATUS<>'NA' OR #TEST_A.STATUS<>NULL)
16 WHERE (B.状态=NULL OR B.状态='NA')