求一条查询sql

config_man 2015-05-04 03:53:33
求一条查询语句

column1 column3 column4
1 10 null
2 10 6
3 20 8

结果:
column1 column3 column4
1 10 0
2 10 0
2 0 6
3 20 0
3 0 8

结果解释:
1、当column3和column4其中一个为null时,就显示自己原本那条数据
2、当column3和column4都有数值时,就显示2条。
这2条前面的列保持一致,即column1相同,但后面就分情况,当column3为原值时,column4作0;
当column4为原值时,column3设0.
...全文
185 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
config_man 2015-05-06
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
这不很简单么!
/* 测试数据
WITH table1(column1,column3,column4) AS (
    SELECT 1,10,null UNION ALL
    SELECT 2,10,6 UNION ALL
    SELECT 3,20,8
) */
    SELECT *
      FROM (
            SELECT column1, column3, 0 column4
              FROM table1
             WHERE column3 IS NOT NULL
            UNION ALL
            SELECT column1, 0 column3, column4
              FROM table1
             WHERE column4 IS NOT NULL
           ) t
  ORDER BY column1, column3 DESC
    column1     column3     column4
----------- ----------- -----------
          1          10           0
          2          10           0
          2           0           6
          3          20           0
          3           0           8
恩,就是这样。之前我也用的union all,就是卡在将列的值显示为0那里,怎么想都想不起来。-->【0 columnName】
config_man 2015-05-05
  • 打赏
  • 举报
回复
先结贴给各位帮忙的分了。太忙了,等有时间再看吧,先谢谢各位了。
Tiger_Zhao 2015-05-05
  • 打赏
  • 举报
回复
这不很简单么!
/* 测试数据
WITH table1(column1,column3,column4) AS (
SELECT 1,10,null UNION ALL
SELECT 2,10,6 UNION ALL
SELECT 3,20,8
) */
SELECT *
FROM (
SELECT column1, column3, 0 column4
FROM table1
WHERE column3 IS NOT NULL
UNION ALL
SELECT column1, 0 column3, column4
FROM table1
WHERE column4 IS NOT NULL
) t
ORDER BY column1, column3 DESC

    column1     column3     column4
----------- ----------- -----------
1 10 0
2 10 0
2 0 6
3 20 0
3 0 8
czfxwpy 2015-05-05
  • 打赏
  • 举报
回复
select distinct id,c1,c2 from (
SELECT id
    ,CASE WHEN c1 IS null or c2 IS NULL THEN c1
          WHEN RN=1 THEN c1 ELSE 0 END c1
    ,CASE WHEN c1 IS NULL or c2 IS NULL THEN c2
          WHEN RN=2 THEN c2 ELSE 0 END c2
FROM cc T1,(SELECT 1 RN UNION SELECT 2)T2
--ORDER BY T1.id,RN
) tt
改进了一下
Nemo_XP 2015-05-05
  • 打赏
  • 举报
回复
这么扯淡的需求,问题解决没?没解决了我就不辞劳苦的给你写一个。
还在加载中灬 2015-05-04
  • 打赏
  • 举报
回复
必须试了 另外,就个不对,别人不会明白是什么的,具体说说,如果是效果不对,就说下差异,如果报错,就贴错误信息 最后,把你改的语句贴上来看看
config_man 2015-05-04
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
SELECT column1
	,CASE WHEN column3 IS NULL OR column4 IS NULL THEN column3
		  WHEN RN=1 THEN column3 ELSE 0 END column3
	,CASE WHEN column3 IS NULL OR column4 IS NULL THEN column4
		  WHEN RN=2 THEN column4 ELSE 0 END column4
FROM TB T1,(SELECT 1 RN UNION SELECT 2)T2
ORDER BY T1.column1,RN
我这边试了下,不对。不知道你那边试了没有。
还在加载中灬 2015-05-04
  • 打赏
  • 举报
回复
SELECT column1
	,CASE WHEN column3 IS NULL OR column4 IS NULL THEN column3
		  WHEN RN=1 THEN column3 ELSE 0 END column3
	,CASE WHEN column3 IS NULL OR column4 IS NULL THEN column4
		  WHEN RN=2 THEN column4 ELSE 0 END column4
FROM TB T1,(SELECT 1 RN UNION SELECT 2)T2
ORDER BY T1.column1,RN

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧