如果部分单词与另一列匹配,我有一个场景可以从一组逗号分隔的字符串中替换整个字符串。
我发现用文字解释非常复杂,因此我通过包含各种示例的屏幕截图进行了解释。
请帮助我使用存储过程或函数或查询来获得如下屏幕截图中Required_result列中的结果。
我尝试使用STRING_SPLIT
函数来拆分值并连接表。我对解决这个问题的逻辑感到震惊。
我需要识别和更新Co_Related_Item列下的共同相关记录,如下所示。表名是CoRelated。
场景解释:
在第一组中,即[GroupID] = 1,我们可以看到b=c、c=d 和 e=d,因此b=c=d=e并且需要标记为“是”。它们是相互关联的。但是x与组中的任何项目都不相关,因此它是一个不同的项目。所以我们可以忽略这条记录。
+----------+---------+-------+-------+-----------------+
| Required result|
+----------+---------+-------+-------+-----------------+
| UniqueID | GroupID | Item1 | Item2 | Co_Related_Item |
+----------+---------+-------+-------+-----------------+
| 1 | 1 | x | | |
| 2 | 1 | b | c | YES |
| 3 | 1 | c | d | YES |
| 4 | 1 | d | | YES |
| 5 | 1 | e | d | YES |
| 6 | 1 | e | | YES |
| 7 | 1 | e | c | YES |
--------------------------------------------------------
| 8 | 2 | a | | |
| 9 | 2 | b | | |
--------------------------------------------------------
| 10 | 3 | x | | |
| 11 | 3 | y | | |
| 12 | 3 | a | b | YES |
| 13 | 3 | b | | YES |
--------------------------------------------------------
| 14 | 4 | x | | |
| 15 | 4 | y | | |
| 16 | 4 | x | | |
| 17 | 4 | c | | YES |
| 18 | 4 | d | | YES |
| 19 | 4 | d | c | YES |
--------------------------------------------------------
| 20 | 5 | a | c | YES |
| 21 | 5 | b | c | YES |
| 22 | 5 | b | | YES |
| 23 | 5 | c | | YES |
+----------+---------+-------+-------+-----------------+
我的第一次尝试:
Update a SET a.Co_Related_item = 'Y' from CoRelated a inner join CoRelated b on a.[GroupID] = b.[GroupID] and (a.Item1 = b.Item2 or b.item1 = a.Item2)
我的第二次尝试:
我添加了一个新列Flag并执行了如下所示的两步查询。
1)
Update a SET a.Flag = b.Item1 from CoRelated a inner join CoRelated b on a.[GroupID] = b.[GroupID] where (a.Item1 = b.Item2 or b.item1 = a.Item2)
2)
Update a SET a.Flag = b.Item1 from CoRelated a inner join CoRelated b on a.[GroupID] = b.[GroupID] and (a.Item1 = b.Flag or a.item2 = b.Flag)
where a.Flag is null
但是我的查询遗漏了一些项目。
注意:我的表中有 600 万条记录和 300K GroupID。请给出一个有效的查询。
我有一个带有 varchar 列的表。它允许商标(™)、版权(©)和其他 Unicode 字符,如下所示。
Create table VarcharUnicodeCheck
(
col1 varchar(100)
)
insert into VarcharUnicodeCheck (col1) values ('MyCompany')
insert into VarcharUnicodeCheck (col1) values ('MyCompany™')
insert into VarcharUnicodeCheck (col1) values ('MyCompany░')
insert into VarcharUnicodeCheck (col1) values ('MyCompanyï')
insert into VarcharUnicodeCheck (col1) values ('MyCompany')
select * from VarcharUnicodeCheck
但是varchar 的定义说,它允许非 unicode 字符串数据。但是 Trademark(™) 和 Registered(®) 符号是Unicode字符。定义是否与 varchar 数据类型的属性相矛盾?我读了几个链接,比如第一个和第二个。但是当定义说它只允许非 unicode 字符串值时,我仍然不明白为什么它允许 unicode 字符串。
我正在使用 SQL Server 2008 R2。当在 SQL Server 中创建新数据库时,我需要默认创建一个简单的存储过程。我怎样才能做到这一点?假设要创建的存储过程是
CREATE PROCEDURE [dbo].[Default_SP]
AS
BEGIN
SELECT GETDATE()
END
触发器可以应用于表级别。但这是在数据库创建事件上。我在网上搜索但找不到答案。
我有一个Mydatabase
在 SQL Server 2008 R2 中创建的数据库。我已经升级到 SQL Server 2012。
我试图执行下面的查询来计算百分位数
select Distinct [KEY],PERCENTILE_CONT(0.25) within group(order by EachPrice)
OVER(Partition By [KEY]) As Q1,PERCENTILE_CONT(0.50) within group(order by EachPrice)
OVER(Partition By [KEY]) As Q2,
PERCENTILE_CONT(0.75) within group(order by EachPrice)
OVER(Partition By [KEY]) As Q3,
PERCENTILE_CONT(1) within group(order by EachPrice)
OVER(Partition By [KEY]) As Q4
from Mydatabase
但我收到一条错误消息,指出
Msg 10762, Level 15, State 1, Line 1
当前兼容模式下不允许使用 PERCENTILE_CONT 函数。仅允许在 110 或更高模式下使用。
请指教