2016-01-12 5 views
0

Ниже приведен код, чтобы определить, существуют ли идентификаторы пользователя: 1 followerid = 2 И userid = 2 followerid = 1, тогда пользовательский столбец «bool» вернет TRUE. Однако, как-то я не могу избавиться от лишней строки. Любое лучшее предложение или рекомендации приветствуются. Спасибо.SQL Query filter с настраиваемым полем

SELECT DISTINCT a.id, a.userid, a.followerid, 
CASE WHEN b.userid=a.followerid AND b.followerid=a.userid 
    THEN 'TRUE' ELSE 'FALSE' END AS bool 
FROM tableUserfollow AS a, tableUserfollow AS b 
where a.userid=1 

tableUserFollow:

id userid followerid 
1  1  2 
2  3  4 
3  1  4 
4  5  1 
5  2  1 

В результате вывод должен быть:

1 1 2 TRUE 
3 1 4 FALSE 

вместо этого:

1 1 2 FALSE 
1 1 2 TRUE 
3 1 4 FALSE 
+0

Вы не правильно объединять эти две таблицы. Вы должны использовать JOIN между этими двумя с надлежащим состоянием. Теперь у вас есть эквивалент CROSS JOIN (но в синтаксисе SQL старой школы, который устарел). –

ответ

0

Если вы хотите знать, если взаимные отношения настоящее, то я худой К самым простым способом является использование связанного подзапроса, left join или outer apply:

select uf.*, coalesce(flag, 'FALSE') as 
from tableUserfollow uf outer apply 
    (select 'TRUE' as flag 
     from tableUserfollow uf2 
     where uf2.userId = uf.followerId and uf2.follwerId = uf.userId 
    ) f; 

join будет выглядеть так:

select uf.*, 
     (case when uf2.userId is null then 'FALSE' else 'TRUE' end) 
from tableUserfollow uf left join 
    tableUserfollow uf2 
    on uf2.userId = uf.followerId and uf2.follwerId = uf.userId 
+0

Если он не знает, как применить простое соединение, я сомневаюсь, что он это поймет. Вы должны объяснить – sagi

+0

@GordonLinoff Спасибо большое. Прекрасно решайте мою проблему. Большой!! – WoonWG

+0

@GordonLinoff И я понимаю, как работает ваш код, просто не знаю, как применить в моей ситуации ранее. Еще раз спасибо. – WoonWG

0
DECLARE @sql AS nvarchar(MAX); 
DECLARE @Search AS nvarchar(MAX); 
DECLARE @AllFiels Varchar(max); 
DECLARE @FixedField Varchar(max); 

SET @FixedField=(SELECT 
    ISNULL((STUFF( 
    ( 
    SELECT ', '+(a.value) FROM vwCustomColumns a 
    WHERE a.Name IN (SELECT items FROM dbo.Split(CustomReports.ReportFixedFields,',')) 
    FOR XML path('') 
    ) 
    , 1,1,'')) ,'cR.ContractID [Contract ID]') FixedField 

    FROM CustomReports WHERE [email protected]) 

    SET @[email protected]; 


    SET @sql ='SELECT count(*) OVER() AS Maxcount ,'[email protected]+' 
    FROM vwRequestLatest cR 
    INNER JOIN MasterUsers ON MasterUsers.UsersId = cR.Addedby 
    LEFT OUTER JOIN RequestTemplate cte ON cte.ContractTemplateId=cR.RequestTemplateId 
    LEFT OUTER JOIN CountryMaster co ON co.CountryId=cR.CountryId 
    ORDER BY 
'; 

IF (@SortColumn = '') 
BEGIN 
    IF (@Direction = 0) 
    SET @sql [email protected] + ' cR.RequestId ASC ' 
    ELSE 
    SET @sql [email protected] + ' cR.RequestId DESC ' 
END 
ELSE IF (@SortColumn = 'Request ID') 
BEGIN 
    IF (@Direction = 0) 
    SET @sql [email protected] + ' cR.RequestId ASC ' 
    ELSE 
    SET @sql [email protected] + ' cR.RequestId DESC ' 
END 

SET @sql [email protected] +'OFFSET ('+CONVERT(VARCHAR(100),@PageNo)+' - 1) * '+CONVERT(VARCHAR(100),@RecordsPerPage)+' ROWS FETCH NEXT '+CONVERT(VARCHAR(100),@RecordsPerPage)+' ROWS ONLY' 

EXEC(@sql); 
+0

Этот вид для настраиваемого поля SELECT Имя поля AS Имя, 'rpt. [' + FieldName + ']' Значение AS \t \t FROM CustomDataConfigurator – Kiran

Смежные вопросы