如何在SQL子查询中添加条件

如何在SQL子查询中添加条件,sql,xml,Sql,Xml,我有一个嵌套的子查询来生成XML文件输出结果 在最终的XML结果中,我需要根据条件跳过几个元素 请帮助我在下面的场景中如何操作 查询: SELECT InterfaceName,[Version],CreationSource,CreationTimestamp, (SELECT TOP 1 NULL AS BusinessUnitList, (SELECT BusinessUnit.[BusinessUnit_id] AS id, (SELECT

我有一个嵌套的子查询来生成XML文件输出结果

在最终的XML结果中,我需要根据条件跳过几个元素

请帮助我在下面的场景中如何操作

查询:

SELECT  InterfaceName,[Version],CreationSource,CreationTimestamp,
  (SELECT TOP 1 NULL AS BusinessUnitList,
        (SELECT  BusinessUnit.[BusinessUnit_id] AS id, 

         (SELECT  [User_id]AS id,[User_loginName] AS loginName ,[User_password] AS [password] ,[User_statusCode] AS statusCode,[User_firstName] AS firstName,[User_lastName] AS lastName ,[User_defaultLanguageName] AS defaultLanguageName,[User_forcePasswordChange] AS forcePasswordChange,

             --RoleList
                (SELECT TOP 1 NULL AS RoleList,
                    (SELECT Role_id AS id FROM #UserRole AS [Role] WHERE [Role].User_id= [User].[User_id]   FOR XML AUTO, TYPE) 
                   FROM [dbo].[EmployeeFeedStage] AS RoleList  FOR XML AUTO, TYPE
                   ),

            --OrgList
                (SELECT TOP 1 NULL AS OrgList,
                    (SELECT [Organization_id] AS id FROM [dbo].[EmployeeFeedStage] AS Organization  WHERE Organization.[User_id]= [User].[User_id] FOR XML AUTO, TYPE) 
                    FROM [dbo].[EmployeeFeedStage] AS OrgList FOR XML AUTO, TYPE
                  ),
            --Address
                (SELECT [Address_country] AS country ,[Address_email] AS email FROM [dbo].[EmployeeFeedStage] AS [Address] WHERE [Address].[User_id]= [User].[User_id] FOR XML AUTO, TYPE) ,

            --Employee
                (SELECT [Employee_badgeNumber] AS badgeNumber,[Employee_birthDate] AS birthDate,[Employee_hireDate] AS hireDate,[Employee_seniorityDate] AS seniorityDate,[Employee_managerLevelFlag] AS managerLevelFlag,[Employee_managerClockOverridePassword]  AS managerClockOverridePassword,[Employee_punchValidation] AS punchValidation,[Employee_employeeType] AS employeeType,[Employee_schedulingTypeCode] AS schedulingTypeCode, [Employee_employeeGeneratesExceptions] AS employeeGeneratesExceptions ,[Employee_employeeGeneratesAlerts] AS employeeGeneratesAlerts ,[Employee_payrollSystemNumber] AS payrollSystemNumber ,


--AccrualConfigList
--Here need to add condition to skip this element if AccrualConfig_id is NULL

                    (SELECT TOP 1 NULL AS AccrualConfigList,
                        (SELECT [AccrualConfig_id] AS id, [AccrualConfig_start] AS start FROM [dbo].[EmployeeFeedStage] AS AccrualConfig WHERE AccrualConfig.[User_id]= [User].[User_id]   FOR XML AUTO, TYPE)
                        FROM [dbo].[EmployeeFeedStage] AS AccrualConfigList  FOR XML AUTO, TYPE
                    ) ,

                        --Availability

                        (SELECT [Availability_minHoursPerWeek] AS minHoursPerWeek,[Availability_maxHoursPerWeek] AS maxHoursPerWeek,[Availability_maxDaysPerWeek]AS maxDaysPerWeek,[Availability_maxConsecutiveDays]AS maxConsecutiveDays,[Availability_maxConsecutiveDaysAcrossWeeks]AS maxConsecutiveDaysAcrossWeeks,[Availability_minHoursBetweenShifts]AS minHoursBetweenShifts,     [Availability_allowSplitShifts]AS allowSplitShifts FROM [dbo].[EmployeeFeedStage] AS [Availability] WHERE [Availability].[User_id]= [User].[User_id]  FOR XML AUTO, TYPE),
                        --Job List--
                        (SELECT TOP 1 NULL AS JobList,
                      (SELECT  [Job_id] AS id, [Job_start] AS start,   
                        (SELECT  [PrimaryJobInfo_payPolicyId] AS payPolicyId,[PrimaryJobInfo_punchRuleId] AS punchRuleId,[PrimaryJobInfo_shiftStrategyId] AS shiftStrategyId,[PrimaryJobInfo_exemptFlag] AS exemptFlag,[PrimaryJobInfo_salariedFlag] AS salariedFlag,[PrimaryJobInfo_fullTimeFlag] AS fullTimeFlag FROM [dbo].[EmployeeFeedStage] AS PrimaryJobInfo   WHERE PrimaryJobInfo.[User_id]= [User].[User_id] FOR XML AUTO, TYPE ) ,
                        (SELECT [JobRate_start] AS start,[JobRate_rate] AS rate FROM [dbo].[EmployeeFeedStage] AS JobRate WHERE JobRate.[User_id]= [User].[User_id] FOR XML AUTO, TYPE)  

                       FROM [dbo].[EmployeeFeedStage] AS Job WHERE Job.[User_id]= [User].[User_id] FOR XML AUTO, TYPE)
                       FROM [dbo].[EmployeeFeedStage] AS JobList WHERE JobList.[User_id]= [User].[User_id] FOR XML AUTO, TYPE),

                       --WorkStatusList
                       (SELECT TOP 1 NULL AS WorkStatusList,
                        (SELECT [WorkStatus_action] AS action,[WorkStatus_status] AS status,[WorkStatus_start] AS start   FROM [dbo].[EmployeeFeedStage] AS WorkStatus WHERE WorkStatus.[User_id]= [User].[User_id] FOR XML AUTO, TYPE)                    
                         FROM [dbo].[EmployeeFeedStage] AS WorkStatusList WHERE WorkStatusList.[User_id]= [User].[User_id] FOR XML AUTO, TYPE
                        )

                        --(SELECT TOP 1 NULL AS TimeoffAccrualList,
                        --(SELECT [TimeoffAccrual_PayAdjustmentID] AS payAdjustmentId,[TimeOffAccrual_EffectiveDate] AS effectiveDate, [TimeOffAccrual_Accrued] AS accrued FROM [dbo].[EmployeeFeedStage] AS TimeoffAccrual WHERE TimeoffAccrual.[User_id]= [User].[User_id] FOR XML AUTO, TYPE)
                        -- FROM [dbo].[EmployeeFeedStage] AS TimeoffAccrualList WHERE TimeoffAccrualList.[User_id]= [User].[User_id] FOR XML AUTO, TYPE
                        --)

                    FROM [dbo].[EmployeeFeedStage] AS Employee  WHERE Employee.[User_id]= [User].[User_id] FOR XML AUTO, TYPE
                )


          FROM [dbo].[EmployeeFeedStage] AS [User] WHERE [User].[BusinessUnit_id] = BusinessUnit.[BusinessUnit_id] FOR XML AUTO, TYPE)

        FROM [dbo].[EmployeeFeedStage] AS BusinessUnit WHERE BusinessUnit.[BusinessUnit_id]='10027760' GROUP BY BusinessUnit.[BusinessUnit_id]  FOR XML AUTO, TYPE)  
        FROM [dbo].[EmployeeFeedStage] AS BusinessUnitList FOR XML AUTO, TYPE)
  FROM #Document AS EnterpriseDocument FOR XML AUTO, TYPE

快速演示,xml自动跳过空值,键入


请参阅-应计科目清单;此处需要条件请尝试将代码减少到所需的最小值。您应该删除重复但不相关的部分。张贴你得到的减少的输出以及你的预期输出应该是什么样子。请阅读并当前实施选择[Employee_badgeNumber]作为badgeNumber,[Employee_birthDate]作为birthDate,[Employee_hireDate]作为HiredDate,-AccountalConfigGlist选择TOP 1 NULL作为AccountalConfigGlist,选择[AccountalConfig_id]作为id,[AccountalConfig_start]作为从[dbo]开始。[EmployeeFeedStage]作为AccountalConfig用于XML AUTO,键入FROM[dbo].[EmployeeFeedStage]作为XML AUTO的AccountalConfig,键入,-Job List--作为员工所在地的[dbo].[EmployeeFeedStage]作为员工的职务列表子查询。[User\u id]=[User]。[User\u id]对于XML AUTO,键入[Employee\u badgeNumber]作为badgeNumber,[Employee\u birthDate]作为生日,-AccountalConfig如果[AccountalConfig\u id]如果为NULL,则转到SkipAccrual选择前1个NULL作为AccountalConfigGlist,选择[AccountalConfig_id]作为id,选择[AccountalConfig_start]作为从[dbo]开始的起点。[EmployeeFeedStage]作为XML AUTO的AccountalConfig,键入[dbo]。[EmployeeFeedStage]作为从[dbo]开始的AccountalConfigGlist,键入,SkipAccrual:-作业列表的子查询。[EmployeeFeedStage]作为Employee WHERE Employee。[User\u id]=[User]。[User\u id]对于XML AUTO,上面的类型是预期的实现通常选择[AccountalConfig\u id]作为id,[AccountalConfig\u start]作为从[dbo]开始的开始。[EmployeeFeedStage]作为AccountalConfig WHERE AccountalConfig.[User\u id]=[User]。[User\u id]对于XML AUTO,TYPE可能返回多个项目。什么意思是[AccountalConfig_id]为null、所有为null或至少一个为null?
with t as  (
    select 1 c1, 2 c2
    union all
    select 3, 4
    union all
    select 5, 6
)
select c1, (
        select c1, case when c2 < 6 then c2 end as c2 
        from t t2
        where t1.c1=t2.c1
        for xml auto, type) xml
from t t1 ;