2009-06-23 135 views
7

使用多个值,我使用的是类似这样的表在T-SQL SELECT语句:SQL:在一个SELECT语句

SELECT DISTINCT name, location_id, application_id FROM apps 
WHERE ((application_id is null) or (application_id = '4')) 
AND ((location_id is null) or (location_id = '3')) 

这似乎很好地工作一个APPLICATION_ID或一个LOCATION_ID搜索时,但是如果我想为多个位置运行声明呢?我想返回所有结果的未知数量的location_id和application_id的。例如,如果我想在location_id的2,3,4,5处搜索某人,但只有一个application_id。我将如何做到这一点?

预先感谢您!


编辑:我是个白痴!我没有给你所有的细节,这听起来很简单。所有这些值都在表格内给出。用户将不得不从表格中的列中选择ID而不是插入它们。在对这个问题做了一点研究之后,我似乎在吹捧一个可行的解决方案。

CREATE FUNCTION iter$simple_intlist_to_tbl (@list nvarchar(MAX)) 
    RETURNS @tbl TABLE (number int NOT NULL) AS 
BEGIN 
    DECLARE @pos  int, 
      @nextpos int, 
      @valuelen int 

    SELECT @pos = 0, @nextpos = 1 

    WHILE @nextpos > 0 
    BEGIN 
     SELECT @nextpos = charindex(',', @list, @pos + 1) 
     SELECT @valuelen = CASE WHEN @nextpos > 0 
           THEN @nextpos 
           ELSE len(@list) + 1 
         END - @pos - 1 
     INSERT @tbl (number) 
     VALUES (convert(int, substring(@list, @pos + 1, @valuelen))) 
     SELECT @pos = @nextpos 
    END 
    RETURN 
END 

任何人都可以帮我完善这个以满足我的需求吗?对不起,如果我的问题不是很清楚,我正在努力自己去解决它。


编辑2:关于这个问题做更多的阅读之后,似乎我需要一个存储过程来做到这一点。上面的代码似乎是我所需要的,但是我很难根据我的需要来定制它。该表结构如下:

application_id name     location_id 
------------------------------------------------------ 
1    Joe Blogs    34 
2    John Smith   55 

据我只是链接到相应的文章:

“的处理 问题的正确方法是使用一个函数, 解包串。到表下面 是一个非常简单的这样的功能:”

所以,看来我需要将这些值解压到一个字符串,并通过使用该存储过程将它们传递edure。任何想法,我如何才能得到这个工作?

编辑3:我设法解决它使用charindex()和convert(),而设置它们在顶部。感谢您的全力帮助,我再次为痛苦道歉。

+0

发布表定义和一些示例行,查询和预期的答案会提高答案的质量。 – Andomar 2009-06-23 09:49:26

+0

道歉没有给出完整的解释,只是遇到了一些技术困难,而我正在绞尽脑汁解决这个问题。 – 2009-06-23 10:06:53

回答

17

中使用如下:

location_id IN ('2', '3', '4', '5') 
0

可以按如下方式使用IN子句: -

SELECT DISTINCT name, location_id, application_id FROM apps 
WHERE ((application_id is null) or (application_id = '4')) 
AND ((location_id is null) or (location_id in ('2', '3', '4', '5'))) 
3

我不知道如果我明白了 “编辑” 的一部分,你的问题是对的,但你的意思是这样吗?

SELECT DISTINCT name, location_id, application_id 
FROM apps 
WHERE location_id IN 
(
    SELECT id FROM other_table 
) 

编辑:
现在,我看了你的第二个编辑,我仍然不知道如果我明白你真正想做的事情。

当然,我们可以帮助您与您的存储过程,但有一件事是不是很清楚,我:

你要我们帮你打造SP?
或者你真的想做别的事情,但认为你必须通过创建一个SP来做到这一点,因为链接是这样说的?

你能指定预期的结果是怎样的吗?