【问题标题】:T-SQL / SQL Server logical select [duplicate]T-SQL / SQL Server逻辑选择[重复]
【发布时间】:2015-04-28 19:20:46
【问题描述】:

我有一张分成许多行的表格。该表如下所示:

admissions:

PersonID    Field_Value 
------------------------
  1775      UNDECIDED
  1775      PC-STJ
  1775      N/A
  1775      DEMENTIA
  1775      STJ
  1775      0
  1775      N/A
  1775      N/A
  1775      N

我有一个视图,可以在一行上捕获信息,如下所示。

请注意,与 UI 不同,以上是它在数据库中提供给我的内容。

1775,  UNDECIDED, PC -STJ, N/A, DEMENTIA, STJ, 0, N/A, N/A, N

【问题讨论】:

  • 你的问题是什么?
  • 如何获取第一行的信息?如 1775、未决定、PC -STJ、N/A、痴呆、STJ、0、N/A、N/A、N
  • 您是否有一个简单的 Stuff 示例以及如何使用它?
  • Yes....@TabAlleman 链接了这个技术的一个很好的例子。我不确定它可以简单得多。这几乎与您正在做的事情完全相同。除非我们中的一个人为您编写代码,否则不会更容易。

标签: sql-server


【解决方案1】:
DECLARE @Admission TABLE (PersonID INT, Field_Value VARCHAR(25));
INSERT INTO @Admission
    VALUES  (1775,'UNDECIDED'),
            (1775,'PC-STJ'),
            (1775,'N/A'),
            (1775,'DEMENTIA'),
            (1775,'STJ'),
            (1775,'0'),
            (1775,'N/A'),
            (1775,'N/A'),
            (1775,'N');

SELECT  PersonID,
        STUFF(
                (
                    SELECT ', ' + Field_Value
                    FROM @Admission
                    WHERE PersonID = A.PersonID
                    FOR XML PATH('')
                ),
        1,2,'') AS Field_Values
FROM @Admission A
GROUP BY PersonID

结果:

PersonID    Field_Values
----------- ------------------------------------------------------
1775        UNDECIDED, PC-STJ, N/A, DEMENTIA, STJ, 0, N/A, N/A, N

【讨论】:

    【解决方案2】:

    试试这个:

        SELECT o.PersonID , fieldvalues = STUFF(
        (SELECT ',' + field_value 
              FROM admissions i
              where i.PersonID= o.PersonID
              FOR XML PATH (''))
             , 1, 1, '')
        from admissions o. Group by  o.PersonID ;
    

    【讨论】:

    • 你错过了按人分组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多