zoukankan      html  css  js  c++  java
  • 【原创】Sql中Count统计记录为0处理方法

    Sql查询时通常会遇到用Count统计,并且会出现记录为0的情况,处理方法分析如下:(记下以防忘记)

             为了方便分析,举例说明:

             创建相册表T_ Album和相片表T_Photo,并插入部分测试数据

        Sql脚本如下: 

     

    USE [master]
    GO
    IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'test')
    BEGIN
    CREATE DATABASE [test] ON  PRIMARY 
    ( NAME 
    = N'sadf', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sadf.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
     
    LOG ON 
    ( NAME 
    = N'sadf_log', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\sadf_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    END

    GO
    EXEC dbo.sp_dbcmptlevel @dbname=N'test'@new_cmptlevel=90
    GO
    IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
    begin
    EXEC [test].[dbo].[sp_fulltext_database] @action = 'disable'
    end
    GO
    ALTER DATABASE [test] SET ANSI_NULL_DEFAULT OFF 
    GO
    ALTER DATABASE [test] SET ANSI_NULLS OFF 
    GO
    ALTER DATABASE [test] SET ANSI_PADDING OFF 
    GO
    ALTER DATABASE [test] SET ANSI_WARNINGS OFF 
    GO
    ALTER DATABASE [test] SET ARITHABORT OFF 
    GO
    ALTER DATABASE [test] SET AUTO_CLOSE OFF 
    GO
    ALTER DATABASE [test] SET AUTO_CREATE_STATISTICS ON 
    GO
    ALTER DATABASE [test] SET AUTO_SHRINK OFF 
    GO
    ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS ON 
    GO
    ALTER DATABASE [test] SET CURSOR_CLOSE_ON_COMMIT OFF 
    GO
    ALTER DATABASE [test] SET CURSOR_DEFAULT  GLOBAL 
    GO
    ALTER DATABASE [test] SET CONCAT_NULL_YIELDS_NULL OFF 
    GO
    ALTER DATABASE [test] SET NUMERIC_ROUNDABORT OFF 
    GO
    ALTER DATABASE [test] SET QUOTED_IDENTIFIER OFF 
    GO
    ALTER DATABASE [test] SET RECURSIVE_TRIGGERS OFF 
    GO
    ALTER DATABASE [test] SET  ENABLE_BROKER 
    GO
    ALTER DATABASE [test] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
    GO
    ALTER DATABASE [test] SET DATE_CORRELATION_OPTIMIZATION OFF 
    GO
    ALTER DATABASE [test] SET TRUSTWORTHY OFF 
    GO
    ALTER DATABASE [test] SET ALLOW_SNAPSHOT_ISOLATION OFF 
    GO
    ALTER DATABASE [test] SET PARAMETERIZATION SIMPLE 
    GO
    ALTER DATABASE [test] SET  READ_WRITE 
    GO
    ALTER DATABASE [test] SET RECOVERY FULL 
    GO
    ALTER DATABASE [test] SET  MULTI_USER 
    GO
    ALTER DATABASE [test] SET PAGE_VERIFY CHECKSUM  
    GO
    ALTER DATABASE [test] SET DB_CHAINING OFF 
    USE [test]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[T_Album]'AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[T_Album](
        
    [AlbumID] [int] IDENTITY(1,1NOT NULL,
        
    [AlbumName] [nvarchar](50NOT NULL,
     
    CONSTRAINT [PK_T_Album] PRIMARY KEY CLUSTERED 
    (
        
    [AlbumID] ASC
    )
    WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
    ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[T_Photo]'AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[T_Photo](
        
    [PhotoID] [int] IDENTITY(1,1NOT NULL,
        
    [PhotoName] [nvarchar](50NOT NULL,
        
    [AlbumID] [int] NOT NULL,
     
    CONSTRAINT [PK_T_Photo] PRIMARY KEY CLUSTERED 
    (
        
    [PhotoID] ASC
    )
    WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
    ON [PRIMARY]
    END
    GO
    USE [test]
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_T_Photo_T_Album]'AND parent_object_id = OBJECT_ID(N'[dbo].[T_Photo]'))
    ALTER TABLE [dbo].[T_Photo]  WITH CHECK ADD  CONSTRAINT [FK_T_Photo_T_Album] FOREIGN KEY([AlbumID])
    REFERENCES [dbo].[T_Album] ([AlbumID])
    ON UPDATE CASCADE
    ON DELETE CASCADE

    insert into T_Album(AlbumName) values(N'生活写真')
    insert into T_Album(AlbumName) values(N'风景写实')
    insert into T_Album(AlbumName) values(N'名胜古迹')
    GO

    insert into T_Photo(PhotoName,AlbumID) values(N'生活写真',1)
    insert into T_Photo(PhotoName,AlbumID) values(N'生活写真',1)
    insert into T_Photo(PhotoName,AlbumID) values(N'生活写真',1)
    insert into T_Photo(PhotoName,AlbumID) values(N'名胜古迹',3)
    GO

    现打算获得各个相册中的相片数

    ,实现sql脚本如下:
    select AlbumName As N'相册',Count(PhotoID) As N'相片数' from T_Album left outer join (select PhotoID,PhotoName,AlbumID from T_Photo) T on T_Album.AlbumID=T.AlbumID Group By AlbumName

    主要采用左连接的方法处理。

    得到结果如下:

  • 相关阅读:
    Mac 终端自动补全忽略大小写
    AtCoder ABC 155F Perils in Parallel
    AtCoder ABC 155E Payment
    AtCoder ABC 155D Pairs
    AtCoder ABC 154F Many Many Paths
    牛客 边界都是1的最大正方形大小
    牛客 打印N个数组整体最大的Top K
    牛客 数组中子数组的最大累乘积
    牛客 在数组中找到一个局部最小的位置
    牛客 子矩阵最大累加和问题
  • 原文地址:https://www.cnblogs.com/zwffff/p/1441979.html
Copyright © 2011-2022 走看看