数据库较不常用关键词用法参考库

本文详细介绍了SQL Server中两种不常用但重要的数据库操作:1. 使用WITH AS进行递归查询,展示如何获取所有子项及其子项,适用于处理树形结构数据。2. 利用PIVOT将列值转换为列名,实现统计字段出现次数的功能,常见于统计分析。示例代码展示了具体实现方法,并提供了实际应用案例。
摘要由CSDN通过智能技术生成

SQLsever

1.递归 查询所有子项以及子项的子项(WITH AS)

功能:实现递归查询子项以及子项的子项
用途:常用于文件夹等树形结构
核心关键词:WITH … AS 、 UNION ALL
具体参考代码:

CREATE PROCEDURE BOMTreesGetGold ( @BomFnumber VARCHAR ( 100 ) ) AS DECLARE
@BomFnumberT VARCHAR ( 100 );

SET @BomFnumberT = @BomFnumber;
WITH sll AS (
	SELECT
		A.FID AS ID,
		A.FNUMBER AS mainFnumberArgument,
		B.FENTRYID AS childID,
		C.FNUMBER+ '*' + G.FNAME AS theTitle,
		ISNULL( H.FNUMBER , zz.FNUMBER ) AS childBomNumber,
/**/
		zz.FNUMBER AS latestBomFumber,
		G.FNAME AS name 
	FROM
		T_ENG_BOM AS A
		LEFT JOIN [T_ENG_BOMCHILD] AS B ON a.FID = b.FID
		LEFT JOIN [T_BD_MATERIAL] AS C ON C.FMATERIALID = B.FMATERIALID
		LEFT JOIN T_ENG_BOM_L AS D ON A.FID = D.FID -- 		LEFT JOIN [T_BD_MATERIAL] AS E ON A.FMATERIALID = E.FMATERIALID
		LEFT JOIN [T_BD_MATERIAL_L] AS G ON B.FMATERIALID = G.FMATERIALID
		LEFT JOIN [dbo].[T_ENG_BOM] AS H ON b.FBOMID = H.FID
		LEFT JOIN ( SELECT FID, FNUMBER, FMATERIALID FROM T_ENG_BOM WHERE FID IN ( SELECT MAX ( FID ) id FROM T_ENG_BOM GROUP BY FMATERIALID ) ) AS ZZ ON ZZ.FMATERIALID = B.FMATERIALID 
	),
	SSSS AS ( SELECT * FROM sll AS A WHERE A.MainFnumberArgument IN ( @BomFnumber ) UNION ALL SELECT LL.* FROM sll AS LL JOIN SSSS AS LL1 ON LL.MainFnumberArgument = LL1.childBomNumber -- 	WHERE  MainFnumberArgument in (@BomFnumber)
	) SELECT DISTINCT 
	childID AS MM,
	1 AS FFloorNum,* 
FROM
	SSSS 
ORDER BY
	childID

核心代码:

DECLARE  @KeyNameArg VARCHAR(50);
SET @KeyNameArg = 'Key1';

WITH CodeBlockName 
AS 
(
SELECT * FROM TableName WHERE KeyName  = @KeyNameArg
UNION ALL 
SELECT ShortNameOfTableName.* FROM TableName AS ShortNameOfTableName JOIN CodeBlockName  AS ShortNameOfCodeBlock ON ShortNameOfTableName.ParentID = ShortNameOfCodeBlock.ChildID
)

SELECT * FROM CodeBlockName  

表TableName:
表TableName
执行结果:

执行结果
关键词用法:

2.列值旋转为列名(PIVOT)

功能:将列值旋转为列名
用途:常用于统计某字段出现的次数

具体参考代码:

SELECT
	反审核,保存,登入系统 
FROM
	( 
	SELECT COUNT ( [FOPERATENAME] ) AS [FOPERATENUMS],
	[FOPERATENAME] FROM  [dbo].[T_BAS_WEBAPILOG] WHERE [FRUNRESULT] = 'Success' 
	GROUP BY [FOPERATENAME] ) AS A PIVOT ( SUM ( A.[FOPERATENUMS] ) FOR [FOPERATENAME] IN ( 反审核, 保存, 登入系统 ) ) AS B

T_BAS_WEBAPILOG表(部分):
 T_BAS_WEBAPILOG表(部分)
执行结果:
PIVOT 执行结果
具体代码相当简单,核心代码可以直接参考具体代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值