SQL Server - 按条件选择列

时间:2017-12-14 15:08:12

标签: sql sql-server

我想知道是否有按条件选择列的选项。

SQL查询是从表中获取2行,然后比较这两行的每个列值。

我希望所选列是具有不匹配值的列

select * (only column with different values)
from Account c 
where c.DistributorID = "ID"
  and c.AccountID = "ID" or c.AccountID = "ID"

******编辑************

这是我的第一个问题,很抱歉,如果我不清楚它......

(index)---- AccountID ---- DistributorID ---- Name --- City --- Fun

1 ---------- 12345 ------------- ------------ 2 -------丹NY ------- 5

2 ---------- 45678 ------------- ----------- 2 -----丹尼尔NY --- ---- 6

我想创建一个查询,只选择和显示具有不同值的列,在本例中我将看到结果:

(索引)---- AccountID -------名称----乐趣

--- 1 -------- 12345 -----------担------ 5

--- 2 -------- ---------- 45678 ----丹尼尔6

3 个答案:

答案 0 :(得分:0)

您需要输入所有列。这意味着您的选择变为:

select column1,column2

如果要删除column1和column2相等的行,则查询变为:

select Column1, Column2
from Account c 
where c.DistributorID= "ID"and 
c.AccountID = "ID" or c.AccountID = "ID" 
AND Column1 != Column2

答案 1 :(得分:0)

如果我理解你的想法,那么你的解决方案可能会在动态sql中。如果您查看由表的object_id过滤的sys.columns,那么您将获得列的列表。如果您使用该列表返回列名称,如果列名称的内容不匹配,那么您可以构造一些内容来返回该数据。

假设您要使用它来发现行之间的差异,我建议输出三列:Column name,valueInRow1,valueInRow2作为更可读的结果集。请注意,这将是一个相当粗糙和复杂的TSQL,但不是一个简单的查询。

这里的技术作为单独的项目被很好地记录,尽管没有像这样整理。如果你完全陷入困境并且不知道从哪里开始那么请告诉我,我会帮你的。希望这足以让你走上一条道路。

答案 2 :(得分:0)

我认为您要寻找的是根据特定条件获取结果集中的值。如果是这种情况,则CASE(双关语)可以帮助您解决问题:

select *, CASE c.AccountID 
                      WHEN "ID1" THEN ColumnForID1
                      WHEN "ID2" THEN ColumnForID2
                      END
from Account c 
where c.DistributorID= "ID"and c.AccountID in ("ID1", "ID2")