Sql server 如何合并SQL Server存储过程中的列表

Sql server 如何合并SQL Server存储过程中的列表,sql-server,join,stored-procedures,union,Sql Server,Join,Stored Procedures,Union,这将显示以下数据: ALTER PROCEDURE [dbo].[spGetItemCategories] AS BEGIN SET NOCOUNT ON; --SELECT * FROM ItemCategories SELECT IC.Id, IC.Name ,C.Id AS CompanyId, C.Name AS CompanName FROM ItemCategories IC JOIN C

这将显示以下数据:

ALTER PROCEDURE [dbo].[spGetItemCategories]
AS
BEGIN
    SET NOCOUNT ON;
    --SELECT * FROM ItemCategories

    SELECT 
        IC.Id, IC.Name ,C.Id AS CompanyId, C.Name AS CompanName 
    FROM
        ItemCategories IC
    JOIN 
        CompanyItems CI ON IC.Id = CI.ItemCategoryId
    JOIN
        Companies C ON CI.CompanyId = C.Id
    --WHERE CI.CompanyId IN (SELECT TOP(100)* FROM Companies C)
END
但我想这样:

4   sdfs    14  Nestle
4   sdfs    15  Unilever

您可以检查此方法,但数据相同

4   sdfs    14  Nestle 
            15  Unilever
或CTE

declare @mytable table (compid int,compname varchar(20),itemid int, itemdesc varchar(20))

insert into @mytable
values 
(1,'Company A',100,'Nestle'),
(1,'Company A',200,'UniLever'),
(2,'Company B',300,'Citrix'),
(2,'Company B',400,'SQL'),
(2,'Company B',500,'Oracle'),
(1,'Company B',600,'Microsoft')


select 
 iif(left(m1.ord_id,1)>1,NULL,m.compid) [CompID],
 iif(left(m1.ord_id,1)>1,NULL,m.compname) [CompName],
 m.itemid,
 m.itemdesc
 from @mytable m
 inner join (
    select distinct compid,row_number() over (partition by compid order by itemid) [ord_id], itemid
    from @mytable) m1
    on m.compid = m1.compid and m.itemid = m1.itemid
如果不满意空值,请替换字段

;with cte as
(
select distinct compid,row_number() over (partition by compid order by itemid) [ord_id], itemid 
from @mytable
) 
select 
 iif(left(m1.ord_id,1)>1,NULL,m.compid) [CompID],
 iif(left(m1.ord_id,1)>1,NULL,m.compname) [CompName],
 m.itemid,
 m.itemdesc
 from @mytable m
 inner join cte m1
 on m.compid = m1.compid and m.itemid = m1.itemid
结果

iif(left(m1.ord_id,1)>1,'',cast(m.compid as varchar)) [CompID],
iif(left(m1.ord_id,1)>1,'',m.compname) [CompName],

或者,在EntityFramework中,您将数据与显示渲染混淆。您在SSMS的“结果”选项卡中看到的呈现不是最终用户应该看到的(除非您计划将应用程序建模为SSMS)。。。强迫数据库执行通常为应用程序保留的工作,只会在你进入应用程序时引起悲伤。你只是为了演示而经历了很多步骤。从数据库的角度来看,OP的SQL是正确的。我想说,他们需要认识到表示和数据之间的区别。NULL不是我的解决方案。你不同意吗?你为什么不在@smoore4创建你的解决方案,让我来判断。这是怎么回事?NULL只是SQL的结果,您可以随时重新格式化它。。。这只是一个有解决方案的概念。我知道你想要分数。我们都有。这并不意味着每个问题都是合理的,值得回答,即使是可能的。正确的数据库方法是基于集合的。格式化数据是表示层的一部分。我知道你知道。您是否编写过要求查询输出(而不是表示)如下所示的查询?不是我,我应该说。。欢迎来到SQL@smoore4的世界。。凡事都有第一
CompID  CompName    itemid  itemdesc
1       Company A   100     Nestle
                    200     UniLever
                    600     Microsoft
2       Company B   300     Citrix
                    400     SQL
                    500     Oracle