如何查询筛选条件中对第一条记录做where筛选

时间:2021-04-01 20:12:20
如何查询筛选条件中对第一条记录做where筛选
数据库中记录是这样的,只有级别1有完工量了,下一级2才能开始工作,现在我要把这些查询出来,第一条记录的完工量不为0,其他下一级别有的为0,有的不为0,可以不考虑,只要保证第一级别的完工量不为0,这样的sql语句怎么写

11 个解决方案

#1


楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

#2


最好贴出测试数据,查询条件以及要的结果

#3


select * from tab wher 级别=1 and 完工量<>0

#4


    SELECT TOP 1 *
      FROM table1
     WHERE 完工量 <> 100
  ORDER BY 级别

#5


引用 1 楼 wmxcn2000 的回复:
楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

如何查询筛选条件中对第一条记录做where筛选
比如这样的,不是只查找出第一条数据的,他们都是在一个组号里,要把这一个组的都查出来,除了第1级别的完工量不能为0,其他级别的数据可以为0,可以不为0,为0和不为0的都要查出来

#6


--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([名称] nvarchar(23),[完工量] int,[级别] int,[组号] int)
Insert #T
select N'名称1',100,1,7 union all
select N'名称2',80,2,7 union all
select N'名称3',80,3,7 union all
select N'名称4',0,NULL,7 union all
select N'名称5',0,1,8 union all               --级别为1但是数量为0则不显示
select N'名称6',80,3,8 union all
select N'名称7',10,NULL,8
Go
--测试数据结束
SELECT  a.*
FROM    #T a
        JOIN ( SELECT DISTINCT
                        组号
               FROM     #T b
               WHERE    b.级别 = 1
                        AND b.完工量 <> 0
             ) t ON t.组号 = a.组号



如何查询筛选条件中对第一条记录做where筛选

#7


引用 6 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([名称] nvarchar(23),[完工量] int,[级别] int,[组号] int)
Insert #T
select N'名称1',100,1,7 union all
select N'名称2',80,2,7 union all
select N'名称3',80,3,7 union all
select N'名称4',0,NULL,7 union all
select N'名称5',0,1,8 union all               --级别为1但是数量为0则不显示
select N'名称6',80,3,8 union all
select N'名称7',10,NULL,8
Go
--测试数据结束
SELECT  a.*
FROM    #T a
        JOIN ( SELECT DISTINCT
                        组号
               FROM     #T b
               WHERE    b.级别 = 1
                        AND b.完工量 <> 0
             ) t ON t.组号 = a.组号



如何查询筛选条件中对第一条记录做where筛选

可不可以不指定b.级别 = 1啊,因为数据库里不一定是从1开始的,也可能是从6开始

#8


引用 5 楼 ajdkjalj 的回复:
Quote: 引用 1 楼 wmxcn2000 的回复:

楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

如何查询筛选条件中对第一条记录做where筛选
比如这样的,不是只查找出第一条数据的,他们都是在一个组号里,要把这一个组的都查出来,除了第1级别的完工量不能为0,其他级别的数据可以为0,可以不为0,为0和不为0的都要查出来


这块不是说第一级别的不能为0 么。。。还是说只要这组里有一个不为0 的就把这组信息都读取出来?

#9


引用 8 楼 sinat_28984567 的回复:
Quote: 引用 5 楼 ajdkjalj 的回复:

Quote: 引用 1 楼 wmxcn2000 的回复:

楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

如何查询筛选条件中对第一条记录做where筛选
比如这样的,不是只查找出第一条数据的,他们都是在一个组号里,要把这一个组的都查出来,除了第1级别的完工量不能为0,其他级别的数据可以为0,可以不为0,为0和不为0的都要查出来


这块不是说第一级别的不能为0 么。。。还是说只要这组里有一个不为0 的就把这组信息都读取出来?

怪我没说明白,级别的值最小的代表级别最高,只需要保证级别最高的在制量不为0,其他低级别的也要查出来

#10


是完工量、、、、、

#11


试试这个
试试这个
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([名称] nvarchar(23),[完工量] int,[级别] int,[组号] int)
Insert #T
select N'名称1',100,1,7 union all
select N'名称2',80,2,7 union all
select N'名称3',80,3,7 union all
select N'名称4',0,NULL,7 union all
select N'名称6',80,3,8 union ALL --最小组号为3,但数量不为0,则显示出来
select N'名称7',10,NULL,8
Go
--测试数据结束
SELECT * FROM #T WHERE 组号 IN(
SELECT DISTINCT
        t.组号
FROM    #T a
        JOIN ( SELECT   MIN(级别) AS 级别 ,
                        组号
               FROM     #T b
               GROUP BY 组号
             ) t ON t.级别 = a.级别
                    AND t.组号 = a.组号
WHERE   a.完工量 <> 0)


如何查询筛选条件中对第一条记录做where筛选

#1


楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

#2


最好贴出测试数据,查询条件以及要的结果

#3


select * from tab wher 级别=1 and 完工量<>0

#4


    SELECT TOP 1 *
      FROM table1
     WHERE 完工量 <> 100
  ORDER BY 级别

#5


引用 1 楼 wmxcn2000 的回复:
楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

如何查询筛选条件中对第一条记录做where筛选
比如这样的,不是只查找出第一条数据的,他们都是在一个组号里,要把这一个组的都查出来,除了第1级别的完工量不能为0,其他级别的数据可以为0,可以不为0,为0和不为0的都要查出来

#6


--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([名称] nvarchar(23),[完工量] int,[级别] int,[组号] int)
Insert #T
select N'名称1',100,1,7 union all
select N'名称2',80,2,7 union all
select N'名称3',80,3,7 union all
select N'名称4',0,NULL,7 union all
select N'名称5',0,1,8 union all               --级别为1但是数量为0则不显示
select N'名称6',80,3,8 union all
select N'名称7',10,NULL,8
Go
--测试数据结束
SELECT  a.*
FROM    #T a
        JOIN ( SELECT DISTINCT
                        组号
               FROM     #T b
               WHERE    b.级别 = 1
                        AND b.完工量 <> 0
             ) t ON t.组号 = a.组号



如何查询筛选条件中对第一条记录做where筛选

#7


引用 6 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([名称] nvarchar(23),[完工量] int,[级别] int,[组号] int)
Insert #T
select N'名称1',100,1,7 union all
select N'名称2',80,2,7 union all
select N'名称3',80,3,7 union all
select N'名称4',0,NULL,7 union all
select N'名称5',0,1,8 union all               --级别为1但是数量为0则不显示
select N'名称6',80,3,8 union all
select N'名称7',10,NULL,8
Go
--测试数据结束
SELECT  a.*
FROM    #T a
        JOIN ( SELECT DISTINCT
                        组号
               FROM     #T b
               WHERE    b.级别 = 1
                        AND b.完工量 <> 0
             ) t ON t.组号 = a.组号



如何查询筛选条件中对第一条记录做where筛选

可不可以不指定b.级别 = 1啊,因为数据库里不一定是从1开始的,也可能是从6开始

#8


引用 5 楼 ajdkjalj 的回复:
Quote: 引用 1 楼 wmxcn2000 的回复:

楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

如何查询筛选条件中对第一条记录做where筛选
比如这样的,不是只查找出第一条数据的,他们都是在一个组号里,要把这一个组的都查出来,除了第1级别的完工量不能为0,其他级别的数据可以为0,可以不为0,为0和不为0的都要查出来


这块不是说第一级别的不能为0 么。。。还是说只要这组里有一个不为0 的就把这组信息都读取出来?

#9


引用 8 楼 sinat_28984567 的回复:
Quote: 引用 5 楼 ajdkjalj 的回复:

Quote: 引用 1 楼 wmxcn2000 的回复:

楼主 用 excel 画一下你的预期结果;

测试数据,多给出一些; 再说一下规律

如何查询筛选条件中对第一条记录做where筛选
比如这样的,不是只查找出第一条数据的,他们都是在一个组号里,要把这一个组的都查出来,除了第1级别的完工量不能为0,其他级别的数据可以为0,可以不为0,为0和不为0的都要查出来


这块不是说第一级别的不能为0 么。。。还是说只要这组里有一个不为0 的就把这组信息都读取出来?

怪我没说明白,级别的值最小的代表级别最高,只需要保证级别最高的在制量不为0,其他低级别的也要查出来

#10


是完工量、、、、、

#11


试试这个
试试这个
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([名称] nvarchar(23),[完工量] int,[级别] int,[组号] int)
Insert #T
select N'名称1',100,1,7 union all
select N'名称2',80,2,7 union all
select N'名称3',80,3,7 union all
select N'名称4',0,NULL,7 union all
select N'名称6',80,3,8 union ALL --最小组号为3,但数量不为0,则显示出来
select N'名称7',10,NULL,8
Go
--测试数据结束
SELECT * FROM #T WHERE 组号 IN(
SELECT DISTINCT
        t.组号
FROM    #T a
        JOIN ( SELECT   MIN(级别) AS 级别 ,
                        组号
               FROM     #T b
               GROUP BY 组号
             ) t ON t.级别 = a.级别
                    AND t.组号 = a.组号
WHERE   a.完工量 <> 0)


如何查询筛选条件中对第一条记录做where筛选