`

Sql查询技巧实例

    博客分类:
  • DB
SQL 
阅读更多

Sql查询技巧

 

1  A04中的含有ABCD四个字段,当按A字段分组后,如果D1,则只统计B的值,如果D0,则只统计C的值。

CREATE TABLE A04(A VARCHAR(20),B INT,C INT,D INT)

INSERT INTO A04 VALUES('01',20,7,'0')

INSERT INTO A04 VALUES('01',10,8,'1')

INSERT INTO A04 VALUES('02',20,7,'1')

INSERT INTO A04 VALUES('02',10,8,'0')

 

 

SELECT A,SUM(CASE D WHEN 1 THEN B WHEN 0 THEN C END) FROM A04 GROUP BY A

 

2  如何实现有一组有规则的编号(如200305310001200305310999

 

DECLARE @I INT,@C VARCHAR(20)

SELECT @I=1

WHILE @I<1000 BEGIN

  SELECT @C=CASE WHEN @I<10 THEN '000'+CAST(@I AS CHAR(1))

                 WHEN @I BETWEEN 10 AND 99 THEN '00'+CAST(@I AS CHAR(2))

                 WHEN @I BETWEEN 100 AND 999 THEN '0'+CAST(@I AS CHAR(3))

            END

  SELECT @C=CONVERT(VARCHAR(20),GETDATE(),112)+@C

  SELECT @C     --在查询分析器中输出

  SELECT @I=@I+1

END

 

3、现在有三个表,结构如下

Score(FScoreId  成绩记录号,FSubID 课程号,FStdID 学生号,FScore    成绩)

student:FID  学生号,FName  姓名)

subject:FSubID   课程号,FSubName 课程名),  

怎么能实现这个表:

姓名   英语   数学   语文  历史

张萨   78     67     89    76

王强   89     67     84    96  

李三   70     87     92    56

李四   80     78     97    66

SELECT A.FNAME AS 姓名,

      英语 = SUM(CASE B.FSUBNAME WHEN '英语' THEN C.FSCORE END),

      数学 = SUM(CASE B.FSUBNAME WHEN '数学' THEN C.FSCORE END),

      语文 = SUM(CASE B.FSUBNAME WHEN '语文' THEN C.FSCORE END),

      历史 = SUM(CASE B.FSUBNAME WHEN '历史' THEN C.FSCORE END)

FROM STUDENT A, SUBJECT B, SCORE C

WHERE A.FID = C.FSTDID AND B.FSUBID = C.FSUBID GROUP BY A.FNAME

 

4、有两个表,用一条SQL语句算出商品A,B目前还剩多少?表结构如下:

商品名称mc  商品总量sl  表一(AAA)

  A         100

  B         120

商品名称mc  出库数量sl 表二(BBB)

   A         10

   A         20

   B         10

   B         20

SELECT TA.商品名称,A-B AS 剩余数量 FROM

(SELECT 商品名称,SUM(商品总量) AS A FROM AAA GROUP BY 商品名称)TA,

(SELECT 商品名称,SUM(出库数量) AS B FROM BBB GROUP BY 商品名称)TB

WHERE TA.商品名称=TB.商品名称

 

6、有一个商品销售表,记载了某月商品的销售数量,现在要为所有商品排名次,放到一个单独的字段中,就是说达到右边显示的效果,如何作?

 

BU1032        5        NULL      BU1032 5  2

PS2091        3        NULL      PS2092 3  3

PC8888        50        NULL      PC8888 50 1

 

UPDATE X SET ORD=(SELECT COUNT(*)+1 FROM X B WHERE B.QTY>X.QTY)

 

7、本人有一张表单, 要求统计COL1~COL6中不等于2的列的个数,数据如下:

————————————————————————————————

ROW_ID |  COL1  |  COL2  |  COL3  |  COL4  |  COL5  |  COL6  |

  1    |    2   |    1   |    1   |    2   |    3   |    2   |

  2    |    1   |    1   |    2   |    2   |    2   |    2   |

  3    |    2   |    3   |    2   |    2   |    1   |    2   |

  4    |    2   |    2   |    2   |    2   |    1   |    2   |

  5    |    1   |    2   |    2   |    2   |    2   |    2   |

  6    |    2   |    2   |    2   |    2   |    2   |    1   |

————————————————————————————————

        要求结果如下:

        —————————

ROW_ID | COUNT  |

  1    |    3   | 

  2    |    2   |

  3    |    2   |

  4    |    1   |

  5    |    1   |

  6    |    1   |

SELECT ROW_ID,(6-(CASE WHEN COL1=2 THEN COL1 / 2 ELSE 0 END)

-(CASE WHEN COL2=2 THEN COL2 / 2 ELSE 0 END)

-(CASE WHEN COL3=2 THEN COL3 / 2 ELSE 0 END)

-(CASE WHEN COL4=2 THEN COL4 / 2 ELSE 0 END)

-(CASE WHEN COL5=2 THEN COL5 / 2 ELSE 0 END)

-(CASE WHEN COL6=2 THEN COL6 / 2 ELSE 0 END))AS COUNT FROM TABLE_A 

 

8、有一客户表,数据如下:

客户     日期          资金

F001    2003-03-05     123.00

F002    2003-03-04     1223.00

F002    2003-03-02     1123.00

F003    2003-03-05     1231.00

F003    2003-03-04     1232.00

要求选出每个客户最新的哪条记录 组成一个结果集,结果如下:

F001    2003-03-05     123.00

F002    2003-03-04     1223.00

F003    2003-03-05     1231.00

 

SELECT A.客户, B.日期, A.资金 FROM  客户资金表 A,

    (SELECT 客户, MAX(日期) 日期  FROM 客户资金表  GROUP BY 客户 ) B

WHERE A.客户 = B.客户 AND A.日期 = B.日期

 

9、用游标将根据sys_orgmenber表中的member字段为依据将org字段更新到sys_user 表中username对应的reg_num字段信息

 

 

10、下表,记录数据较多,要求对同一分类的数据进行排序?

CREATE TABLE A_TEST(工號VARCHAR(10), 姓名 varchar(10), 時間VARCHAR(20), 序號INT)

INSERT INTO A_TEST VALUES('001',' abc ',’17:40’,0)

INSERT INTO A_TEST VALUES('001','abc',’08:00’,0)

INSERT INTO A_TEST VALUES('001',' abc ',’13:28’,0)

INSERT INTO A_TEST VALUES('001',' abc ',’12:01’,0)

INSERT INTO A_TEST VALUES('002','def',’07:30’,0)

INSERT INTO A_TEST VALUES('002','def',’22:59’,0)

 

结果

工號  姓名  時間     序號

001   abc   08:00     1

001   abc   12:01     2

001   abc   13:28     3

001   abc   17:40     4

002   def    07:30    1

002   def    22:59    2

 

UPDATE A_TEST SET ORD=(

SELECT COUNT(*)+1 FROM A_TEST B WHERE B.SJ<A_TEST.SJ AND B.ID=A_TEST.ID)

 

11、学生关系:SSnoSnameSsexSageclass  

  Sno-学号,class-班级,Sname-姓名,Ssex-性别,Sage-年龄  

  问题:列出至少有12名男生的班号。

Select   Class    

  FROM   S  

  GROUP   BY   class,Ssex  

  HAVING   (COUNT(Class)>=12)   AND   (Ssex='')

 

12、计算一个月第一天的SQL 脚本,周(wk)的时间间隔来计算哪一天是本周的星期一,用年(yy)的时间间隔来显示这一年的第一天,季度的第一天

select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

 

13、原纪录:

    11       AA,BB,CC,DD

想变成

    11     AA

    11     BB

    11     CC

    11     DD

怎么写语句?

 

create table tb其不意(id int,name varchar(500))

insert tb其不意 values(11,'AA,BB,CC,DD')

 

select top 500 id=identity(int,1,1) into # from syscolumns a,syscolumns b

 

select *

from

(

    select a.id,name=substring(a.name,b.id,charindex(',',a.name+',',b.id)-b.id)

    from tb其不意 a,# b

    where b.id<=len(a.name) and substring(','+a.name,b.id,1)=','

) x

 

drop table tb其不意,#

分享到:
评论

相关推荐

    SQL查询技巧(范例宝典)

    SQL查询相关技术,源码大放送! 10.1 SELECT子句 426  实例292 查询特定列数据 426  实例293 使用列别名 428  实例294 在列上加入计算 430 EX10_03  实例295 使用函数设置条件 431  10.2 查询...

    SQL高级查询语句实例

    在"22高级查询.sql"这个文件中,可能包含了这些高级查询技巧的实际应用示例。通过分析这些例子,你可以更好地理解如何在实际场景中运用这些技术。例如,可能有查询用于合并多个表的数据,或者用于统计特定条件下的...

    SQL SERVER项目案例(sql代码)

    在SQL Server数据库管理系统中,...以上知识点只是“SQL SERVER项目案例”中可能涉及的一部分,具体案例可能涵盖更深入的实战技巧和最佳实践。在实际操作中,根据项目需求,还需要灵活应用并不断学习新的特性和技术。

    使用案例加深对MySQL SQL查询理解

    通过阅读[美河学习在线eimhe.com]MySQL查询理解.pdf,你可以更详细地了解这些概念,并找到更多实用的案例来提升你的MySQL SQL查询技巧。记住,实践是最好的老师,不断尝试和优化你的查询,将帮助你在数据库管理领域...

    sql server 2005 技术内幕t-sql查询源码

    《SQL Server 2005 技术内幕:T-SQL查询源码》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是Microsoft SQL Server数据库管理系统中使用的SQL扩展版本,它在标准SQL的基础上增加...

    Microsoft SQL Server 2008技术内幕:T-SQL查询_源代码及附录.zip

    附录A_Microsoft SQL Server 2008技术内幕:T-SQL查询.pdf很可能包含了作者对特定查询技术的深入分析和实用技巧,而"使用说明.txt"可能提供了如何使用书中源代码和示例的指导。"TSQLQuerying20090710"可能是一个包含...

    ASP.net中的SQL查询技巧及应用.pdf

    在本文档中,作者叶文胜和满学璐来自黄冈职业技术学院,他们通过实例详细解释了SQL查询的不同技巧,旨在为读者提供实用的参考信息和专业指导。通过对本文档的学习,开发者应能更好地掌握在***中运用SQL进行高效数据...

    常用SQL查询代码整理

    本资源整理了大量实用的 SQL 查询代码案例,旨在帮助学习者更好地掌握数据库部分的 SQL 查询技巧。这些查询代码案例涵盖了基本的数据检索、数据过滤、数据统计、数据分析等多方面的内容,为学习者提供了实践操作的...

    Microsoft SQL Server 2005技术内幕全套(三):T-SQL查询.part1

    文件列表中的"Microsoft SQL Server 2005技术内幕:T-SQL查询.part3.rar"和"Microsoft SQL Server 2005技术内幕:T-SQL查询.part4.rar"是该书的后续部分,将覆盖更多高级主题和实践案例,进一步深化对T-SQL的理解。

    提升性能的艺术:深入探索SQL查询优化技巧

    本文将详细介绍SQL查询优化的策略和技巧,并通过实例代码展示如何提升查询性能。 SQL查询优化是一个持续的过程,需要对数据库系统有深入的了解和细致的调整。通过本文的探讨,我们了解到了查询优化的重要性、执行...

    SQL查询的艺术 中文版

    《SQL查询的艺术》全面地介绍了数据库的基础知识和SQL查询的技巧,通过丰富的实例,帮助读者掌握常见的SQL应用。全书共分19章,按照数据定义、数据查询、数据操纵、数据控制、事务控制和程序化SQL的顺序,详细地讲解...

    Oralce数据库SQL和pl_sql实例教程

    通过实例训练和练习,学习者可以逐步掌握SQL和PL/SQL的使用技巧,包括基本查询、排序、条件查询、函数应用以及更复杂的查询技术。这些知识对于数据库管理员、开发人员以及其他需要与数据库交互的角色来说至关重要。 ...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...

    VB实现的SQL复合查询实例.rar

    这个"VB实现的SQL复合查询实例"提供了一个实际应用的例子,它利用了SQLQueryTJ.dll这个控件,帮助VB开发者高效地执行多条件查询。 SQLQueryTJ.dll是一个数据库访问组件,它为VB提供了方便的接口,可以处理复杂的SQL...

    sql时间段查询

    ### SQL 时间段查询详解 #### 一、概述 在处理具有日期时间字段的数据时,我们经常需要筛选出特定时间段内的数据。例如,在本案例中,需要获取某表中7月1日至7月31日之间晚上10点到早上6点的数据。这种查询涉及到...

    sql server精华技巧集

    8. **高可用性与灾难恢复**:SQL Server提供多种高可用性解决方案,如镜像、Always On 可用性组和故障转移集群实例。了解这些技术及其配置,可以在系统故障时快速恢复服务。 9. **分区表**:当表数据量巨大时,使用...

    SQL查询的艺术

    ### SQL查询的艺术:掌握高效查询的关键技巧 在数据库管理和数据科学领域中,SQL(Structured Query Language)作为一门标准的语言被广泛应用于数据检索、更新及管理等操作中。一个高效的SQL查询不仅能提高系统的...

    SQL经典案例与使用

    《SQL.chm》可能是关于SQL的离线帮助文档,通常包含了SQL的基础语法、函数、操作和查询技巧等内容。CHM是Microsoft的 Compiled HTML Help 格式,用户可以通过它快速查找和学习SQL的各种概念和命令。 《SQL语句大全...

    sql查询效率

    下面通过几个具体的SQL查询示例来进一步说明上述技巧的应用: **示例1:** ```sql SELECT employee.emp_name, department.dep_name FROM department, employee WHERE (employee.dep_id = department.dep_id) AND ...

Global site tag (gtag.js) - Google Analytics