且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在SQL中显示所选结果而不是多行

更新时间:2023-12-04 10:35:04

请参阅以下链接



http://***.com/questions/8005846/sql-server-combining-multiple-行 - 一行 [ ^ ]



http://***.com/questions/11213235/sql-select-multiple-rows-into-one-displayed-row [ ^ ]
Refer below links

http://***.com/questions/8005846/sql-server-combining-multiple-rows-into-one-row[^]

http://***.com/questions/11213235/sql-select-multiple-rows-into-one-displayed-row[^]


ALTER PROCEDURE [dbo].[Pr_TimeCardReport2]
	  @EM		  VARCHAR(MAX),
      @SD         DATETIME,
      @ED         DATETIME
   
AS
BEGIN

      DECLARE           @Sql VARCHAR(8000)
      DECLARE           @Index INT
      SET               @Index = 0

      SET @Sql =  'SELECT           TC.ID, TC.Start, TC.Finish, TC.EmpMail,
                        (SELECT OUTTime FROM TimeCardBreaks WHERE BreakType = ''Lunch''
                              AND TCID = TC.ID) [L_Out],
                        (SELECT INTime FROM TimeCardBreaks WHERE BreakType = ''Lunch''
                              AND TCID = TC.ID) [L_In], '

      WHILE (@Index < 10)
      BEGIN
            SET @Sql = @Sql + '(SELECT OUTTime FROM TimeCardBreaks TCB WHERE BreakType = ''Smoke''
                        AND TCID = TC.ID
                        AND ' + CAST(@Index AS VARCHAR) + ' = (SELECT COUNT(Id) FROM TimeCardBreaks WHERE BreakType = ''Smoke'' AND TCID = TC.ID
                        AND ID < TCB.ID)) [S' + CAST(@Index+1 AS VARCHAR) + '_Out],
                        (SELECT INTime FROM TimeCardBreaks TCB WHERE BreakType = ''Smoke''
                        AND TCID = TC.ID
                        AND ' + CAST(@Index AS VARCHAR) + ' = (SELECT COUNT(Id) FROM TimeCardBreaks WHERE BreakType = ''Smoke'' AND TCID = TC.ID
                        AND ID < TCB.ID)) [S' + CAST(@Index+1 AS VARCHAR) + '_In], '
            SET @Index = @Index + 1
      END                     

      SET @Sql = SUBSTRING(@Sql, 1, LEN(@Sql)-1)
      SET @Sql = @Sql + ' FROM      TimeCard TC WHERE EmpMail = ''' +@EM+ ''' AND Start >= ''' + CAST(@SD AS VARCHAR)+ ''' AND Finish <= ''' + CAST(@ED AS VARCHAR) + ''''

      EXEC (@Sql)
     
END






使用
Hi,

use
for xml path()





它为您提供了一个特定列的xml字符串,



例如,



,

it gives you a xml string of a perticular column,

for example,

USE AdventureWorks2008R2
SELECT      CAT.Name AS [Category],
            STUFF((    SELECT ',' + SUB.Name AS [text()]
                        – Add a comma (,) before each value
                        FROM Production.ProductSubcategory SUB
                        WHERE
                        SUB.ProductCategoryID = CAT.ProductCategoryID
                        FOR XML PATH('') – Select it as XML
                        ), 1, 1, '' )
                        – This is done to remove the first character (,)
                        – from the result
            AS [Sub Categories]
FROM  Production.ProductCategory CAT





谢谢。



Thanks.