找到具有相同资源键(具有不同.endings)和相同值的行

时间:2014-07-18 14:38:05

标签: sql string

我有下表,其中包含带有.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

但是,我不确定如何接近匹配值的第二部分。 有人可以帮忙吗?

提前致谢!

1 个答案:

答案 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