使用SQL将许多行放入单个列中

时间:2015-06-16 09:45:30

标签: sql sql-server tsql

我有一对多的表,如果有行具有相同的引用ID(段落ID),我想连接,所以LoginName值在同一行中有很多。

此查询执行我想要它做的但是有一个问题,它替换了第一个char。 STUFF函数需要替换值。

我的问题: 如何在不更换第一个字符的情况下执行此操作?

 SELECT DISTINCT
          ParagraphID
        , STUFF((
            SELECT N'|' + CAST([LoginName] AS VARCHAR(255))
            FROM [dbo].[CM_Signature] f2
            WHERE f1.ParagraphID = f2.ParagraphID
            FOR XML PATH ('')), 1, 2, '') AS FileNameString
    FROM [dbo].[CM_Signature] f1

enter image description here

预期价值:

Daniel | Emma

4 个答案:

答案 0 :(得分:3)

你是在第2位而不是第一位

开始你的路径
SELECT DISTINCT
          ParagraphID
        , STUFF((
            SELECT N'|' + CAST([LoginName] AS VARCHAR(255))
            FROM [dbo].[CM_Signature] f2
            WHERE f1.ParagraphID = f2.ParagraphID
            FOR XML PATH ('')), 1, 1, '') AS FileNameString
    FROM [dbo].[CM_Signature] f1    SELECT DISTINCT
              ParagraphID
            , STUFF((
                SELECT N'|' + CAST([name] AS VARCHAR(255))
                FROM mytable f2
                WHERE f1.paragraphid = f2.paragraphid
                FOR XML PATH ('')), 1, 1, '') AS FileNameString
        FROM mytable f1

答案 1 :(得分:3)

使用此代码:

create table #test (paragraghid int,name VARCHAR(10))

insert into #test values(1929,'Daniel')
insert into #test values(1929,'Emma')
insert into #test values(1935,'Daniel')   


select distinct paragraghid,STUFF((select ' | ' + name from #test a 
Where a.paragraghid=b.paragraghid for XML PATH('')  ),1,2,'') as FilenameString
from #test b 

答案 2 :(得分:3)

以下是您可以使用的内容:

STUFF("...", 1, 1, '')

请注意STUFF("...", 1, 2, '')而不是|。 因为您需要替换1个char而不是2个(要删除第一个Daniel|Emma )。

输出:

|

此外,如果您想在SELECT DISTINCT ParagraphID , STUFF(( SELECT N' | ' + CAST([LoginName] AS VARCHAR(255)) FROM [dbo].[CM_Signature] f2 WHERE f1.ParagraphID = f2.ParagraphID FOR XML PATH ('')), 1, 3, '') AS FileNameString FROM [dbo].[CM_Signature] f1 之前和之后有空格,请使用此查询:

STUFF("...", 1, 3, '')

请注意,这次我们删除了3个字符(Daniel | Emma )。

输出:

tail -F abclog.txt | grep --line-buffered -i ERROR > outputfile.txt

答案 3 :(得分:2)

您可以将查询编写为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <ViewPager
            .... />

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                **android:paddingTop="150dp"** > <!-- padding to take some space on top>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/rounder_shape"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/textView1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/hello_world" />

                    ... More text views
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
    </FrameLayout>

</LinearLayout>