WHILE
WHILE,当的意思。在SQL的语法中,通常可以用来重复执行某段SQL脚本。
通俗来说,就是当XXX时,执行某某操作,意为循环。
看到这里,小伙伴可能会有疑问,PowerBI中是否有类似的操作呢?
答案是有的,不过此类操作我们一般都是在PowerQuery中进行的,在DAX中需要进行循环处理的情景较少。
而在SQL中,有很多场景都需要使用循环语句进行处理,比如数据更新或者递增计算等。
语法
代码语言:txt复制WHILE 条件判断
BEGIN
执行操作
SET @i=@i 1 --参数循环递增
END
注意:
如果嵌套了两个或多个 WHILE 循环,首先运行内层循环结束之前的所有语句,然后下一个外层循环重新开始执行。
使用实例
案例数据:
在白茶本机的数据库中存在名为“CaseData”的数据库。
“Dim_Date“日期表、"Dim_Product"产品表、"Fact_Sales"销售事实表。
例子1:
循环打印数字,从1到9。
代码语言:txt复制DECLARE @NUM INT;
SET @NUM = 1;
WHILE @NUM<= 9
BEGIN
PRINT @NUM
SET @NUM = @NUM 1;
END
结果如下:
注:此操作无法在PowerBI中执行,会有报错。
例子2:
创建一张表,并在表中循环插入Price小于等于10的ProductName和Price。
代码语言:txt复制USE CaseData
CREATE TABLE BaiCha
(Pname VARCHAR(50),
Prict INT
)
先创建一张表,结果如下:
执行以下语句:
代码语言:txt复制USE CaseData
DECLARE @NUM INT;
SET @NUM=1
WHILE @NUM<= 10
BEGIN
INSERT INTO BaiCha(Pname,Prict)
SELECT ProductName AS T1,Price AS T2 FROM Dim_Product WHERE Price=@NUM
SET @NUM = @NUM 1;
END
结果如下:
我们来查看一下数据:
可以看到,价格小于等于10的产品信息已经插入到目标表中。
例子3:
利用双层循环,计算1到9的平方。
代码语言:txt复制USE CaseData
DECLARE @NUM1 INT,@NUM2 INT ,@NUM3 VARCHAR(10);
SET @NUM1=1;
WHILE @NUM1<= 9
BEGIN
SET @NUM2=1
WHILE @NUM2<=@NUM1
BEGIN
SET @NUM3=@NUM2*@NUM1
SET @NUM2=@NUM2 1
END
PRINT @NUM3
SET @NUM1=@NUM1 1
END
结果如下:
小Bug提示:经常会有小伙伴循环写着写着就懵掉了,执行循环无法结束,也没有结果显示出来,这种情况下,需要对BEGIN里面的增量SET进行检测,看是否是由于未设置增量导致。
这里是白茶,一个PowerBI的初学者。