置顶:关于SQL语句学习的资源网站(2019年8月12日)
techonthenet
11.在Select中加上条件语句(2019年9月1日)
注意:中文字段名与值都不要太长,最长10个中文。首字母是数字的,要在字段名前后加上"",两个英文双引号。
--以下为在塔谱中的数据表名称
--CO_0111动态单方成本
SELECT
count(*) AS "017表记录总数",
CASE WHEN COUNT(*)<30000
THEN '记录数异常'
ELSE '记录数正常'
END AS 记录数异常状态
FROM CO_0111
10.判断字段值为Null或为空(2019年8月21日)
WHERE (NOT (dbo.资格认证报名_明细.不参考原因 IS NULL)) AND (LEN(dbo.资格认证报名_明细.不参考原因) > 1)
里面有一个空白,也不是NULL,用长度查一下。
9.改变字段的显示顺序(2019年8月21日)
这是设计阶段确定的,视图做到,除非你在设计模式下进行调整。
视图的顺序并不是显示的顺序。
8.位置字符函数(2019年8月18日)
LEFT(dbo.R3报表角色表_交叉表.是否生效, 1) LIKE '是'
在Tableau行级别权限控制中,要用到是否生效这个值,是(J)或是(S),用位置函数就方便找出“是”这个字符了。
同大多数程序一样。
7.将两个字段的值并起来,形成新的字段(2019年8月17日)
str([TASK_1]) + str([T1_HOURS])+'hr'
6.关联后一个字段是否包括另外一个字段(2019年8月16日新发)
dbo.人员档案管理_明细.角色代号 LIKE '%' + dbo.R3报表角色表_交叉表.角色编码 + '%'
上述语句不考虑大小写。
5.主表条件取值TOP1再关联右边(2019年8月11日)
--只能一个用星号,另外一个要逐个标出来,有些麻烦,估计是不能有相同的字段原因,在SQL Server中没有这个问题
SELECT MX.*,ZB.版本号 AS 主表版本号,ZB.填报人 AS 主表填报人,ZB.填报时间 AS 主表填报时间 ,ZB.版本说明 AS 主表版本说明
--主表是选择状态是锁定的范围内数据,再按版本号排序,取第一个值,这个是我想要的
FROM (SELECT TOP 1 * FROM 业态_主表 where 锁定状态='已锁定' ORDER BY 版本号 desc) ZB LEFT JOIN 业态_明细 MX
--关联字段
on ZB.ExcelServerRCID=MX.ExcelServerRCID
4.将两个表关联(2019年8月11日)
SELECT MX.*,ZB.版本号
on ZB.ExcelServerRCID=MX.ExcelServerRCID
问题是:无法将第二个表用*来全部显示,我用的是2019.2.1
无法的原因是在Tableau中不允许有两个相同的字段,因为要关联,必定是要有相同字段的。
3.链接SQL Server时直接用语句联方便(2019年8月11日)
- SELECT top 1 * FROM 业态_主表 order by 版本号 desc
- 这样联接后可以利用丰富的SQL Server语句,不然都要在Tableau中,会比较麻烦。
- 数据源名称可以自由编辑,不然你是不能改的。
- 你可以在语句中添加注释,你会非常方便
--这是注释的方,如果放数据源的名称,来源及作用等。
2.找出版本号最高的那条记录(2019年8月11日)
- 方法一:SELECT top 1 * FROM 业态_主表 order by 版本号 desc
- 方法二:select * from 业态_主表 where 业态_主表.版本号 =(select max(版本号) from 业态_主表) 此办法一个同行建议的,我测试是可行的。至于上述办法哪个更有效率,还有待主讨论。
- 如果不用此办法,可以在Tableau中用自定义最大值,直接过滤也行,但那样效率会很低,不如在SQL Server中这样写方便
1.字段名的几个限制,否则会出错(2019年8月25日更新)
FIELDNAME AS NEW FIELDNAME时,在新的字段名中如果有如下情形,将出错。
1有括号APP_DATE AS 签订日期(原) SQL 语句出错;
2有空格
3有 OR /OR中英文括号()、()
4不能超过10个中文字符