SQL语句!

1-----题目很简单,显示aname中重复的第一行

--创建表

CREATE TABLE [dbo].[testName](
 [id] [int] NULL,
 [aname] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL
)

--插入数据

declare @num int
set @num=1
while(@num<20)
begin
 insert into testName(id,aname)values(@num,'aa')
 set @num=@num+1
end

--sql查询

SELECT     MIN(id) AS Expr1, aname
FROM         testName
GROUP BY aname

2--删除表中重复的数据

今天看到一種方法﹐特摘錄如下﹕

殊不知在SQL Server中有一种更为简单的方法,它不需要用游标,只要写一句简单插入语句就能实现删除重复记录的功能。为了能清楚地表述,我们首先假设存在一个产品信息表Products,其表结构如下:

CREATE TABLE Products (
ProductID int,
ProductName nvarchar (40),
Unit char(2),
UnitPrice money
)

 表中的数据如图1:


图1

  图1中可以看出,产品Chang和Tofu的记录在产品信息表中存在重复。现在要删除这些重复的记录,只保留其中的一条。步骤如下:

  第一板斧——建立一张具有相同结构的临时表

CREATE TABLE Products_temp (
ProductID int,
ProductName nvarchar (40),
Unit char(2),
UnitPrice money
)

  第二板斧——为该表加上索引,并使其忽略重复的值

  方法是在企业管理器中找到上面建立的临时表Products _temp,单击鼠标右键,选择所有任务,选择管理索引,选择新建。如图2所示。

  按照图2中圈出来的地方设置索引选项。



图2

  第三板斧——拷贝产品信息到临时表

insert into Products_temp Select * from Products

  此时SQL Server会返回如下提示:

  服务器: 消息 3604,级别 16,状态 1,行 1

  已忽略重复的键。

  它表明在产品信息临时表Products_temp中不会有重复的行出现。

  第四板斧——将新的数据导入原表

  将原产品信息表Products清空,并将临时表Products_temp中数据导入,最后删除临时表Products_temp。

delete Products
insert into Products select * from Products_temp
drop table Products_temp

  这样就完成了对表中重复记录的删除。无论表有多大,它的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。

 ------------------------------------------------------------------------------------------

dbcc  freeProcCache --清除缓存

 

SELECT creation_time  N'语句编译时间' 
        ,last_execution_time  N'上次执行时间' 
        ,total_physical_reads N'物理读取总次数' 
        ,total_logical_reads/execution_count N'每次逻辑读次数' 
        ,total_logical_reads  N'逻辑读取总次数' 
        ,total_logical_writes N'逻辑写入总次数' 
        ,execution_count  N'执行次数' 
        ,total_worker_time/1000 N'所用的CPU总时间ms' 
        ,total_elapsed_time/1000  N'总花费时间ms' 
        ,(total_elapsed_time / execution_count)/1000  N'平均时间ms' 
        ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,  
         ((CASE statement_end_offset   
          WHEN -1 THEN DATALENGTH(st.text)  
          ELSE qs.statement_end_offset END   
            - qs.statement_start_offset)/2) + 1) N'执行语句' 
FROM sys.dm_exec_query_stats AS qs  
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st  
where SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,  
         ((CASE statement_end_offset   
          WHEN -1 THEN DATALENGTH(st.text)  
          ELSE qs.statement_end_offset END   
            - qs.statement_start_offset)/2) + 1) not like '%fetch%' 
ORDER BY  total_elapsed_time / execution_count DESC;
--order by total_elapsed_time/1000 desc;
--order by execution_count desc

你可能感兴趣的:(sql语句)