Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较一个表中的行-取决于其他列_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 比较一个表中的行-取决于其他列

Sql 比较一个表中的行-取决于其他列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的表中有两列,项目列和配置列。 配置列由3列串联而成,这些列之间用\分隔。 我需要为每个项目选择只有在这个项目中不同的列 我不知道有多少个项目,每个项目的唯一列是不同的。 例如,我的表格如下: 正如您所看到的,项目1中的不同列是第1列和第3列。 项目2中是第3列,项目4中是第2列。 我想在我的每一行的查询中只得到在这个项目中不同的列,以防你别无选择,只能处理你发布的数据,就像它刚刚交给你一样,你别无选择,只能去做 您可以尝试以下方法: -- Declare the variable for u

我的表中有两列,项目列和配置列。 配置列由3列串联而成,这些列之间用\分隔。 我需要为每个项目选择只有在这个项目中不同的列

我不知道有多少个项目,每个项目的唯一列是不同的。 例如,我的表格如下:

正如您所看到的,项目1中的不同列是第1列和第3列。 项目2中是第3列,项目4中是第2列。
我想在我的每一行的查询中只得到在这个项目中不同的列

,以防你别无选择,只能处理你发布的数据,就像它刚刚交给你一样,你别无选择,只能去做

您可以尝试以下方法:

-- Declare the variable for usage later
DECLARE @Project INT
SET @Project = 1

-- Let's use a temp table, say #t2
IF OBJECT_ID('tempdb..#t2') is  null
BEGIN
    -- Just trying: Split the Configuration string since
    --   it would appear the positions are in place
    --   at least in your example
    SELECT * INTO #t2 FROM (
    SELECT COUNT(*) as cnt, Substring(Configuration, 1, 2) AS Col1
        , Substring(Configuration, 4, 2) AS Col2
        , Substring(Configuration, 7, 2) AS Col3
    FROM yourTable --Replace with your table name
    WHERE Project = @Project -- Variable in use here
    GROUP BY Substring(Configuration, 1, 2) 
        , Substring(Configuration, 4, 2) 
        , Substring(Configuration, 7, 2) 
    ) t1
END

-- End select to show the project and the columns that are different
SELECT DISTINCT @Project AS Project, LEFT(REPLACE(Col1, 'A', 1),1) AS DiffColumnNum FROM #t2 GROUP BY Col1 
    HAVING  (COUNT(*) <> (SELECT COUNT(*) FROM #t2)) -- Weird having clause :)
UNION
SELECT DISTINCT @Project AS Project, LEFT(REPLACE(Col2, 'B', 2),1) AS DiffColumnNum FROM #t2 GROUP BY Col2 
    HAVING  (COUNT(*) <> (SELECT COUNT(*) FROM #t2))
UNION
SELECT DISTINCT @Project AS Project, LEFT(REPLACE(Col3, 'C', 3),1) AS DiffColumnNum FROM #t2 GROUP BY Col3 
    HAVING  (COUNT(*) <> (SELECT COUNT(*) FROM #t2))

我同意你问题区域的评论;最好是规范化,但如果您在这件事上没有发言权,请尝试以下代码。我知道它没有经过优化,但它可能会起作用。

在关系数据库中以分隔列表的形式存储数据几乎每次都是一个坏主意。使用单独的表和一对多的关系,你的任务将简单得多。你真的应该考虑NoMyLead数据库。我觉得这只是一个近似的例子,不是吗?这不是我的问题,而是我试图规范我的DBSorry。我希望你不必做太多的改变。。但我很高兴它现在对你有用