如何判断表中的某个字段的所有值都为空,求解答

到处都要注册额 2014-07-23 04:12:47

-------------明细表
CREATE TABLE tb_detail(
orderDay datetime,
orderID varchar(50),
detailID varchar(50),
yanhuo_number int,
primary key(orderDay,orderID,detailID)
)
------订单表
create table tb_order(
orderDay datetime,
orderID varchar(50),
detailNumber int,
allNumber int,
primary key(orderDay,orderID)

)两张表,如何查询tb_order表的时候得出该订单的订单状态:未验收(所有明细都未验收),验收中(部分明细已验收),已验收(所有明细都已验收),也就是判断订单表中的某个订单的明细记录中的allNumber 字段都为空或者部分为空,求解答
...全文
774 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2014-07-23
  • 打赏
  • 举报
回复

select a.*,
       case when b.yhqty=0 then '未验收' 
            when b.yhqty>0 and b.yhqty<b.itemqty then '验收中' 
            when b.yhqty=b.itemqty then '已验收' 
            end '订单状态'
 from tb_order a
 left join
 (select orderID,
         count(1) 'itemqty',
         sum(case when yanhuo_number is not null then 1 else 0 end) 'yhqty'
   from tb_detail
   group by orderID) b on a.orderID=b.orderID
tcmakebest 2014-07-23
  • 打赏
  • 举报
回复
对子表进行记录数统计,再比较两个值的大小就知道了. 用 count(*) 统计记录数, count(yanhuo_number) 统计非空记录数. a=b,且b<>0,所有明细已验收 a=b,且b=0,未知状态 a>b,且b=0,所有明细都未验收 a>b,且b>0,部分明细已验收
shinger126 2014-07-23
  • 打赏
  • 举报
回复
用case子句判断 select b.orderDay,b.orderID, case when isnull(b.yanhuo_number,0)=0 then '未验收', when isnull(b.yanhuo_number,0)<a.allNumber then '验收中' when isnull(b.yanhuo_number,0)=a.allNumber then '已验收' from tb_detail a right join tb_order b on b.orderDay=a.orderDay and b.orderID = a.orderID 不过好奇怪楼主的这个设计啊,居然没有单号。就用一个日期和商品ID来做主键关联。。。
道玄希言 2014-07-23
  • 打赏
  • 举报
回复
如何判断所有明细都已验收 判断看有没有 每验收或者 验收中的嘛,都没有,不就都验收了額……
  • 打赏
  • 举报
回复
引用 2 楼 fredrickhu 的回复:
ISNULL(allNumber,0) 然后求和 为0 的话就全部为NULL 否则就是部分为空
那如何判断所有明细都已验收呢
--小F-- 2014-07-23
  • 打赏
  • 举报
回复
ISNULL(allNumber,0) 然后求和 为0 的话就全部为NULL 否则就是部分为空
  • 打赏
  • 举报
回复
上面说错了是判断订单表中的某个订单的明细记录中的yanhuo_number字段都为空或者部分为空

22,209

社区成员

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

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