我有一个包含4个重要数据列的表。 CusNo,描述,年份和周。所有列数据类型都是CHAR,无法更改。
数据格式为
CusNo Description Year Week
C2134 ROY WK 41, 2016 2016 41
C1152 ROY WK 41, 2016 2016 41
C1589 ROY WK 41, 2016 2016 41
C1921 ROY WK 41, 2016 2016 40
有时,周列的值会被误导,导致我们的报告显示缺失的一周,如上面的最后一个值所示。在这种特殊情况下,公司C1921的报告显示他们在2016年第41周失踪,实际上它只是在“周”栏中输入错误。
有没有办法将说明列中的数据与周列进行比较,以查看该周列出的值是否为同一周?我遇到的问题是描述中的第1至第9周是单个数字(1,2,3 ......),但在周列中它们总是两位数(01,02,03 ... )。由于会计团队出于某种原因使用此格式,因此更改数据是不可行的。
答案 0 :(得分:1)
从description
列获取年份和周的一种方法是:
SELECT Description,
RIGHT(Description,4) [Year],
SUBSTRING(Description,8,CHARINDEX(',',Description)-8) [Week]
FROM dbo.YourTable
如果你需要为它加前缀0,那么:
SELECT Description, [Year], RIGHT('0'+[Week],2) [Week]
FROM (
SELECT Description,
RIGHT(Description,4) [Year],
SUBSTRING(Description,8,CHARINDEX(',',Description)-8) [Week]
FROM dbo.YourTable) X;
答案 1 :(得分:0)
有没有办法将描述栏中的数据与周比较 列,以查看该周列出的值是否为同一周
SELECT t.*
FROM table AS t
INNER JOIN tables AS d ON t.description LIKE 'ROY WK ' + d.week +'%'
本质上,这个select语句将自己进行自我连接,寻找所有描述,例如ROY WK 41
通配符。由于用户手指粗壮,这可能会导致误报。