T-SQL

SQL Server用Cross Apply、Cross Join实现列转行

今天介绍4种列转行(又称宽表转长表、逆透视等)写法。 数据准备 CREATE TABLE Sales([Year] INT,Q1 INT,Q2 INT,Q3 INT,Q4 INT); GO INSERT INTO Sales([Year],Q1,Q2,Q3,Q4) VALUES (2017,12,123,324,123) ,(2018,13,455,324,878) ,(2019,29,786,473,633); SQL写法 UNION 最传统最通用写法 SELECT [Year],'Q1' AS [Quarter],Q1 AS Amount FROM Sales UNION ALL...

交叉表转换为横表

做BI或数据分析时,经常会遇到各类格式转换,这里将最近遇到的一个例子记录一下,分享几种SQL写法。 需求 千言万语抵不上一张图: 数据准备 CREATE TABLE dbo.CategoryConfig(Category VARCHAR(20),[Level]...

SQL Server 常见For XML语句比较

SQL语句: SELECT TOP (3) a.orderid,b.companyname,c.firstname FROM Sales.MyOrders a INNER JOIN Sales.Customers b ON b.custid = a.custid INNER JOIN HR.Employees c ON a.empid = c.empid 结果: For XML Raw sql SELECT TOP(3) a.orderid,b.companyname,c.firstname FROM Sales.MyOrders a INNER JOIN Sales.Customers b ON b.custid = a.custid INNER JOIN HR.Employees c ON a.empid = c.empid FOR XML RAW 结果 说明 每一条记录...

SQL Server中的小数近似处理实例

-- 四舍五入,在小数点后1位舍入 SELECT ROUND(54.565,1) -- 54.600 -- 四舍五入,取整 SELECT ROUND(54.565,0) -- 55.000 -- 四舍五入,在小数点前1位舍入 SELECT ROUND(55.565,-1) -- 60.000 -- 向上取整 SELECT CEILING(34.634) -- 35 -- 向下取整 SELECT FLOOR(34.634) -- 34 -- 小...