如何在sql server中填充多列, [英] How to stuff multiple columns in sql server ,

查看:109
本文介绍了如何在sql server中填充多列,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hii,



我想把多个列填充成一个,



Hii ,

I am trying to stuff multiple columns into one ,

select
    (CASE obj.Objective_Status
    WHEN 1 THEN 'Live'
    WHEN 2 THEN 'Draft'
    WHEN 3 THEN 'Completed'
    ELSE 'Obsolete'
    END) AS 'Objective_Status',

    COUNT(*) 'Percentage',

    (CASE obj.Objective_Status WHEN 1 THEN 2 WHEN 2 THEN 1 When 3 then 3 END) as OrderOfObjectives

FROM Objectives as obj with (nolock)
WHERE obj.Id IN (SELECT * FROM dbo.Split(
    (select STUFF((select ',' + ObjectivesIDsLive from @empObjectives for xml path ('')), 1, 1, '') ,
    STUFF((select ',' + ObjectiveIdsDraft from @empObjectives for xml path ('')), 1, 1, ''),
    STUFF((select ',' + ObjectivesIdsCompleted from @empObjectives for xml path ('')), 1, 1, ''))
, ','))
group by obj.Objective_Status
order BY OrderOfObjectives







这是我到目前为止所尝试过的,我尝试了一个专栏,其中工作正常,但没有multplie列..请建议




this is what i habe tried so far , i tried with one column and its working fine , but not with multplie columns .. please suggets

推荐答案

这样的事情应该有效:

Something like this should work:
SELECT
    CASE obj.Objective_Status
        WHEN 1 THEN 'Live'
        WHEN 2 THEN 'Draft'
        WHEN 3 THEN 'Completed'
        ELSE 'Obsolete'
    END AS 'Objective_Status',
    COUNT(*) 'Percentage',
    CASE obj.Objective_Status 
        WHEN 1 THEN 2 
        WHEN 2 THEN 1 
        WHEN 3 THEN 3 
    END as OrderOfObjectives
FROM 
    Objectives as obj with (nolock)
WHERE 
    Exists
    (
        SELECT 1
        FROM @empObjectives As EO
        CROSS APPLY dbo.Split(ObjectivesIDsLive, ',') As ID
        WHERE ID.value = obj.Id
    )
Or
    Exists
    (
        SELECT 1
        FROM @empObjectives As EO
        CROSS APPLY dbo.Split(ObjectivesIDsDraft, ',') As ID
        WHERE ID.value = obj.Id
    )
Or
    Exists
    (
        SELECT 1
        FROM @empObjectives As EO
        CROSS APPLY dbo.Split(ObjectivesIDsCompleted, ',') As ID
        WHERE ID.value = obj.Id
    )
GROUP BY 
    obj.Objective_Status
ORDER BY 
    OrderOfObjectives
;



您可能需要更改三个 WHERE ID.value = obj.Id 与 Split 函数返回的列名匹配的行。



最好更改 @empObjectives 表变量,以便不将ID组合为以逗号分隔的列表。


You might need to change the "value" column name on the three WHERE ID.value = obj.Id lines to match the column name returned from your Split function.

It would be better to change your @empObjectives table variable so that the IDs weren't combined as a comma-separated list.


这篇关于如何在sql server中填充多列,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆