根据提供的标题、描述、标签及部分内容,我们可以梳理出与T-SQL相关的几个核心知识点: ### 1. T-SQL基础语法 #### 创建临时表 在T-SQL中,临时表是一种特殊的表,它只能被创建并使用于一个特定的会话或者事务中,并且会在会话或事务结束时自动删除。在示例中使用了如下的语法来创建一个临时表: ```sql IF OBJECT_ID('tempdb..#') IS NOT NULL DROP TABLE #; CREATE TABLE # ( varchar(8), С int, ۸ int, varchar(8) ); ``` 这里需要注意的是,`tempdb..#`中的`#`代表了一个本地临时表。如果在创建之前该表已经存在,则先执行删除操作。 #### 插入数据 接着使用`INSERT INTO`语句向临时表中插入多行数据: ```sql INSERT INTO # SELECT 'ӻ', 12, 1200, '' UNION ALL SELECT 'ӻ', 10, 1000, '' UNION ALL SELECT 'ӻ', 15, 1500, '' UNION ALL SELECT '', 12, 1200, '' UNION ALL SELECT '', 10, 1200, '' UNION ALL SELECT '', 100, 2000, ''; ``` 这里的`UNION ALL`用于合并多个查询结果集,保留所有记录,即使有重复也会一并返回。 ### 2. 数据窗口函数 接下来的代码展示了如何使用数据窗口函数来进行数据分析。 #### 密集排名函数(DENSE_RANK) ```sql WITH T1 AS ( SELECT id = DENSE_RANK() OVER (ORDER BY ), * FROM # ), ``` `DENSE_RANK()`函数为每个分区中的行分配一个连续的数字,当出现相同排序值时,它们将具有相同的排名,并且不会有任何空隙。 #### 分区和聚合 ```sql T2 AS ( SELECT DISTINCT id, 0 as A, С, '', ۸, '' FROM T1 UNION ALL SELECT id, 1, LTRIM(С), LTRIM(۸), LTRIM() FROM T1 ) ``` 这里通过`DISTINCT`关键字获取不重复的行,并使用`LTRIM`去除字符串前导空白。`UNION ALL`再次被用于合并查询结果集。 #### 最终查询 ```sql SELECT С, ۸, FROM T2 ORDER BY id, a; ``` 最终查询基于`T2`的结果集进行排序并展示数据。 ### 3. 共同表达式(CTE) #### 使用ROW_NUMBER()函数 ```sql WITH CTE AS ( SELECT id = ROW_NUMBER() OVER (ORDER BY GETDATE()), * FROM # ) ``` `ROW_NUMBER()`函数为每个分区中的行分配一个唯一的编号,按照指定的顺序进行排序。 #### 最终查询 ```sql SELECT = CASE WHEN (SELECT MIN(id) FROM CTE WHERE = .) THEN ELSE '' END, С, ۸, FROM CTE ``` 这里通过`CASE`语句结合子查询来实现条件判断,根据`id`的最小值来决定是否显示某一列的值。 这段代码主要展示了如何使用T-SQL创建临时表、插入数据、使用数据窗口函数以及CTE等高级特性来进行数据分析和处理。这些技术是T-SQL中非常重要的组成部分,对于数据库开发人员来说掌握它们至关重要。
if object_id('tempdb.dbo.#') is not null drop table #
create table #(名称 varchar(8), 大小 int, 价格 int, 厂家 varchar(8))
insert into #
select '电视机', 12, 1200, '海尔' union all
select '电视机', 10, 1000, '长虹' union all
select '电视机', 15, 1500, '康佳' union all
select '冰箱', 12, 1200, '海尔' union all
select '冰箱', 10, 1200, '康佳' union all
select '冰柜', 100, 2000, '康佳'
;with t1 as
(
select id=dense_rank()over(order by 名称),* from #
),
t2 as
(
select distinct id, 0a, 名称 大小, ''价格,''厂家 from t1
union all
select id, 1, ltrim(大小), ltrim(价格), ltrim(厂家) from t1
)
select 大小, 价格, 厂家 from t2 order by id,a
/*
大小 价格 厂家
------------ ------------ --------
冰柜
100 2000 康佳
冰箱
12 1200 海尔
10 1200 康佳
- 粉丝: 3
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助