SQL脚本用于与数据库进行交互,执行各种操作,如数据查询、数据插入、数据更新和数据删除。下面是一些基本的SQL脚本示例,以及如何使用它们来解决特定的问题。
行转列(PIVOT)
行转列是一种将数据从长格式转换为宽格式的技术。以下是一个使用PIVOT的例子,将一个包含季度和数量的表转换为每个商品每个季度的数量。
```sql
-- 创建测试表
CREATE TABLE test (
id INT,
name NVARCHAR(20),
quarter INT,
number INT
);
-- 插入数据
INSERT INTO test VALUES
(1, N'苹果', 1, 1000),
(1, N'苹果', 2, 2000),
(1, N'苹果', 3, 4000),
(1, N'苹果', 4, 5000),
(2, N'梨子', 1, 3000),
(2, N'梨子', 2, 3500),
(2, N'梨子', 3, 4200),
(2, N'梨子', 4, 5500);
-- 使用PIVOT转换数据
SELECT ID, NAME,
AS '一季度',
AS '二季度',
AS '三季度',
AS '四季度'
FROM test
PIVOT (
SUM(number)
FOR quarter IN (, , , )
) AS pvt
列转行(UNPIVOT)列转行与行转列相反,它将宽格式的数据转换为长格式。以下是一个使用UNPIVOT的例子,将一个包含多个季度销售数据的表转换为每个商品每个月的销售数据。```sql-- 创建测试表
CREATE TABLE test2 (
id INT,
name VARCHAR(20),
Q1 INT,
Q2 INT,
Q3 INT,
Q4 INT
);
-- 插入数据
-- (省略数据插入过程)
-- 使用UNPIVOT转换数据
SELECT id, name,
'Q1' AS quarter,
Q1 AS number
FROM test2
UNPIVOT (
number
FOR quarter IN (Q1, Q2, Q3, Q4)
) AS unpvt
数据分类
```sql
-- 假设有一个订单明细表order_detail
-- (省略表创建和数据插入过程)
-- 根据商品销量进行分类
SELECT sku_id,
SUM(sku_num) AS cnt,
CASE
WHEN SUM(sku_num) > 20000 THEN '热门'
WHEN SUM(sku_num) > 5000 THEN '一般'
ELSE '冷门'
END AS category
FROM order_detail
GROUP BY sku_id
用户新增日期```sql-- 假设有一个用户登录明细表user_login_detail
-- (省略表创建和数据插入过程)
-- 筛选每个用户最早登录日期
SELECT user_id,
DATE(MIN(login_ts)) AS dt
FROM user_login_detail
GROUP BY user_id
这些示例展示了如何使用基本的SQL语句来处理和分析数据。根据你的具体需求,你可能需要调整这些脚本以适应不同的数据库和数据结构。

