我有下表,其中包含带有.text或.watermark结尾的资源:
+-------------+-------+
| ResourceKey | Value |
+-------------+-------+
| A.Text | Val1 |
| A.WaterMark | Val2 |
| B.Text | Val3 |
| B.WaterMark | Val3 |
| C.Text | Val4 |
| C.Text | Val4 |
| D.WaterMark | Val5 |
| E.WaterMark | Val5 |
+-------------+-------+
我感兴趣的是找到哪些资源与结尾.text具有相同的值,因为它们具有结尾.watermark。
在上面的示例中,资源B是唯一与描述匹配的资源。
到目前为止,我能够通过使用:
将.ending与字符串分开Begin Tran
DECLARE @TestResourcs TABLE
(ResourceKey NVARCHAR(max),
Value NVARCHAR(MAX))
INSERT INTO @TestResourcs VALUES (' A.Text ',' Val1 '),
(' A.WaterMark ',' Val2 '),
(' B.Text ',' Val3 '),
(' B.WaterMark ',' Val3 '),
(' C.Text ',' Val4 '),
(' C.Text ',' Val4 '),
(' D.WaterMark ',' Val5 '),
(' E.WaterMark ',' Val5 ');
SELECT TOP 1000 ResourceKey,
PARSENAME(ResourceKey, 1) AS TextOrWatermark,
LEFT(ResourceKey,CHARINDEX('.',ResourceKey)) AS RegKey,
Value
FROM @TestResourcs
ROLLBACK
但是,我不确定如何接近匹配值的第二部分。 有人可以帮忙吗?
提前致谢!
答案 0 :(得分:0)
您可以构建两个子查询,一个用于文本,一个用于水印,然后加入这些 - 类似(未经测试):
SELECT w.resource, watermark value
FROM
(
SELECT
PARSENAME(ResourceKey, 1) AS resource,
Value as watermark
FROM
MyTable
WHERE
Value like '%.watermark'
) w
JOIN
(
SELECT
PARSENAME(ResourceKey, 1) AS resource,
Value as txt
FROM
MyTable
WHERE
Value like '%.text'
) t
on t.resource = w.resource
WHERE
watermark = txt