sql 如果查不到数据怎么显示一条为null的记录显示为指定记录?

简欥 2018-10-10 04:02:24
比如
日期 地区 库存
2018-10-01 北京 有
2018-10-01 上海 有
2018-10-02 北京 有
2018-10-02 上海 无

这个表 我如果查询的时候指定 where 日期 between '2018-10-01' and '2018-10-05'的话只会查出表里已有的数据
如何在不往表里插入空数据的前提下 如果根据条件查不到的数据显示为一条全是NULL的数据或者全是指定记录的数据 可以做得到吗

...全文
4255 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
king4323210 2018-10-19
  • 打赏
  • 举报
回复
具体你的业务是怎样的,我不清楚,为什么会有这样的数据结构要求。 不过长期来看,必定是偏见,当然如果你够傲慢可以忽视我的忠告。 这是给自己埋了一个坑。 正确的做法是,做个判断,IF EXISTS 让程序越早进入对应的分支,思路越清楚。 希望对你有帮助
《蛮多鑫鑫》 2018-10-14
  • 打赏
  • 举报
回复
* 九九乘法表 * @author 姚创 * @version 1.0 */ public class Test { /* * 1*1=1 * 2*1=2 2*2=4 * */ public static void main(String[] args){ // 第一层循环控制行数 for(int i=1;i<10;i++){ // 第二层循环控制列数 for(int j=1;j<=i;j++){ System.out.printf("%d*%d=%d\t",i,j,i*j); } System.out.println(); }
二月十六 2018-10-11
  • 打赏
  • 举报
回复
把id的条件放到关联on 后边
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Date] Date,City nvarchar(22),Stock nvarchar(21),[ID] int)
Insert #T
select '2018-10-01',N'北京',N'有',123 union all
select '2018-10-01',N'上海',N'有',123 union all
select '2018-10-02',N'北京',N'有',123 union all
select '2018-10-02',N'上海',N'无',123 union all
select '2018-10-01',N'北京',N'有',1234 union all
select '2018-10-01',N'上海',N'有',1234 union all
select '2018-10-02',N'北京',N'有',1234 union all
select '2018-10-02',N'上海',N'无',1234
Go
--测试数据结束
SELECT
City,
Date,
Stock
FROM
master..spt_values
LEFT JOIN
#T
ON DATEADD(DAY, number, '2018-10-01') = Date
AND ID = '1234' --添加id条件这里
WHERE
type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-10')
ORDER BY
CASE City
WHEN '北京'
THEN '0'
WHEN '上海'
THEN '1'
WHEN '广州'
THEN '2'
WHEN '成都'
THEN '3'
END,
Date;


简欥 2018-10-11
  • 打赏
  • 举报
回复
引用 8 楼 sinat_28984567 的回复:
日期 地区 库存 2018-10-01 北京 有 2018-10-01 上海 有 2018-10-02 北京 有 2018-10-02 上海 无 还是上边这些数据,ID你自己加上,把测试数据补全,然后对应想要的结果写出来,我再给你写,把测试数据和真实数据弄成一样的。
日期 地区 库存 ID 2018-10-01 北京 有 123 2018-10-01 上海 有 123 2018-10-02 北京 有 123 2018-10-02 上海 无 123 2018-10-01 北京 有 1234 2018-10-01 上海 有 1234 2018-10-02 北京 有 1234 2018-10-02 上海 无 1234 想要的结果就是上面一样的结果 指不定过where那里要多个ID的条件 查询指定ID在一段时间内的库存 如果某一天没有数据 则显示为NONE
二月十六 2018-10-10
  • 打赏
  • 举报
回复
日期 地区 库存 2018-10-01 北京 有 2018-10-01 上海 有 2018-10-02 北京 有 2018-10-02 上海 无 还是上边这些数据,ID你自己加上,把测试数据补全,然后对应想要的结果写出来,我再给你写,把测试数据和真实数据弄成一样的。
简欥 2018-10-10
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
如果还不行,就把数据发上来
--测试数据
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T(Date Date,City nvarchar(22),Stock nvarchar(21))
Insert #T
select '2018-10-01',N'北京',N'有' union all
select '2018-10-01',N'上海',N'有' union all
select '2018-10-02',N'北京',N'有' union all
select '2018-10-02',N'上海',N'无'
Go
--测试数据结束
SELECT
    City,
    Date,
    Stock
FROM
    master..spt_values
    LEFT JOIN
        #T
            ON DATEADD(DAY, number, '2018-10-01') = Date
WHERE
    type = 'P'
    AND number
    BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-10')
ORDER BY
    CASE City
        WHEN '北京'
            THEN '0'
        WHEN '上海'
            THEN '1'
        WHEN '广州'
            THEN '2'
        WHEN '成都'
            THEN '3'
    END,
    Date;
我试了半天发现是where后面多个条件就不行了 比如你得测试数据多加一列ID 然后 where 多个条件 ID=xxxx 没有这个条件是可以实现效果 所以应该怎么搞
二月十六 2018-10-10
  • 打赏
  • 举报
回复
如果还不行,就把数据发上来
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T(Date Date,City nvarchar(22),Stock nvarchar(21))
Insert #T
select '2018-10-01',N'北京',N'有' union all
select '2018-10-01',N'上海',N'有' union all
select '2018-10-02',N'北京',N'有' union all
select '2018-10-02',N'上海',N'无'
Go
--测试数据结束
SELECT
City,
Date,
Stock
FROM
master..spt_values
LEFT JOIN
#T
ON DATEADD(DAY, number, '2018-10-01') = Date
WHERE
type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-10')
ORDER BY
CASE City
WHEN '北京'
THEN '0'
WHEN '上海'
THEN '1'
WHEN '广州'
THEN '2'
WHEN '成都'
THEN '3'
END,
Date;


简欥 2018-10-10
  • 打赏
  • 举报
回复
引用 4 楼 sinat_28984567 的回复:
套一下就行了,把我那个临时表换成实际的表名 where条件合到一起,这个语句我没测试,试试行不
SELECT
    City,
    Date,
    Stock
FROM
   master..spt_values
    LEFT JOIN OnSaleStock ON DATEADD(DAY, number, '2018-10-01') = Date
WHERE
    ID = '1234567'
	AND type = 'P'
    AND number
    BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-10') 
ORDER BY
    CASE City
        WHEN '北京'
            THEN '0'
        WHEN '上海'
            THEN '1'
        WHEN '广州'
            THEN '2'
        WHEN '成都'
            THEN '3'
    END,
    Date;
这个不知道为啥不行 没有还是查出来无记录
二月十六 2018-10-10
  • 打赏
  • 举报
回复
套一下就行了,把我那个临时表换成实际的表名 where条件合到一起,这个语句我没测试,试试行不
SELECT
City,
Date,
Stock
FROM
master..spt_values
LEFT JOIN OnSaleStock ON DATEADD(DAY, number, '2018-10-01') = Date
WHERE
ID = '1234567'
AND type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-10')
ORDER BY
CASE City
WHEN '北京'
THEN '0'
WHEN '上海'
THEN '1'
WHEN '广州'
THEN '2'
WHEN '成都'
THEN '3'
END,
Date;
简欥 2018-10-10
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
是在各个意思吗?
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([日期] Date,[地区] nvarchar(22),[库存] nvarchar(21))
Insert #T
select '2018-10-01',N'北京',N'有' union all
select '2018-10-01',N'上海',N'有' union all
select '2018-10-02',N'北京',N'有' union all
select '2018-10-02',N'上海',N'无'
Go
--测试数据结束
SELECT
   CONVERT(VARCHAR(10),DATEADD(DAY, number, '2018-10-01'),120) AS 日期,地区,库存
FROM
    master..spt_values
    LEFT JOIN
        #T
            ON DATEADD(DAY, number, '2018-10-01') = [日期]
WHERE
    type = 'P'
    AND number
    BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-05') ;


是这个意思 =-= 但是我没太看懂 如何用我自己这里。。 我得sql是 select City,Date,Stock from OnSaleStock where ID = '1234567' and Date between '2018-10-01' and '2018-10-10' order by case City when '北京' then '0' when '上海' then '1' when '广州' then '2' when '成都' then '3' end,Date 如何能实现和你一样得效果 就是 City,Date,Stock 没有得话查询出来是NUll 谢谢大神
二月十六 2018-10-10
  • 打赏
  • 举报
回复
是在各个意思吗?
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([日期] Date,[地区] nvarchar(22),[库存] nvarchar(21))
Insert #T
select '2018-10-01',N'北京',N'有' union all
select '2018-10-01',N'上海',N'有' union all
select '2018-10-02',N'北京',N'有' union all
select '2018-10-02',N'上海',N'无'
Go
--测试数据结束
SELECT
CONVERT(VARCHAR(10),DATEADD(DAY, number, '2018-10-01'),120) AS 日期,地区,库存
FROM
master..spt_values
LEFT JOIN
#T
ON DATEADD(DAY, number, '2018-10-01') = [日期]
WHERE
type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2018-10-01', '2018-10-05') ;




qq_34083367 2018-10-10
  • 打赏
  • 举报
回复
select case when 字段名 is null then '无' else '有' end from 表名

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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