当前位置: 首页 > 知识库问答 >
问题:

SQL服务器行冷却[复制]

毕魁
2023-03-14

我似乎是一个简单的任务,但我需要SQL专家的一些帮助。

联系人的数量可以从1人到30人不等,我希望每个cust\u ref的所有电话号码都排在一行。

我怎么能这样做??

共有2个答案

欧阳高昂
2023-03-14

通过使用交叉应用、连接时序分析和联合,我们可以得到上述要求

declare @tableA table (RefId int,Phone varchar(10))
insert into @tableA (RefId,Phone)values (10000,'030123456'),(100123,060123445)

Declare @tableB table (CustID  INT,RefId INT,Phone varchar(10)))
insert into @tableB (CustID,RefId,Phone)values 
(1,10000,'030245789'),
(2,10000,'030245889'),
(1,100123,'060245789'),
(2,100123,'060243389'),
(3,100123,'060289389')

; with CTE AS (
select A.RefId,A.Phone As Phone from @tableA A 
UNION 
select B.RefId,B.Phone As Phone from @tableB B )

 select * from (
 Select RefId,
 val,
 COL + CAST(ROW_NUMBER()OVER(PARTITION BY RefId ORDER BY RefId) AS VARCHAR(1))RN  
    FROM CTE 
CROSS APPLY (VALUES ('Phone',Phone))CS(Col,val))T
PIVOT (MAX(VAL) FOR RN IN ([Phone1],[Phone2],[Phone3],[Phone4]))P 
曹凯泽
2023-03-14

这是一个没有动态sql的解决方案,请尝试:

declare @contacts table(cust_ref int,phone varchar(100));
insert into @contacts values(10000,'ph10000a'),(10000,'ph10000b'),(10000,'ph10000c')
                           ,(10001,'ph10001a'),(10001,'ph10001b'),(10001,'ph10001c') 
                           ,(10002,'ph10002a'),(10002,'ph10002b');

SELECT p.*
FROM
( 
    SELECT 'phone'+REPLACE(STR(ROW_NUMBER() OVER(PARTITION BY cust_ref ORDER BY phone),2),' ','0') AS inx,*
    FROM @contacts    
) AS tbl
PIVOT
(
    MIN(phone) FOR inx IN(phone01,phone02,phone03,phone04) --type more...
) AS p        
 类似资料:
  • Support for the Microsoft SQL Server database. The following table summarizes current support levels for database release versions. 支持的Microsoft SQL Server版本 The following dialect/DBAPI options are av

  • 我所尝试的: 使用作为有状态转换,但聚合状态依赖于时间。然而,即使得到的在聚合值中没有变化,但是KTable(作为changelog)将继续向下发送元素,因此无法实现对流进行“速率限制”的预期效果 提供以下输出: 可能的重复涉及到记录缓存如何在聚合决定在下游发布元素时引起一些混乱的问题。然而,主要的问题是如何在DSL中实现“速率限制”。正如@Miguno所指出的那样,必须返回到较低级别的处理器AP

  • 我有一个服务器,在这个服务器中有一个docker容器正在运行,我在容器中有一个shell脚本,它需要服务器的ip,而不是docker容器的ip。有什么办法可以做到吗? 我在谷歌上搜索了很长时间,却找不到类似的问题。 请帮忙。

  • 问题内容: 我正在尝试将链接的服务器添加到Access数据库。我正在使用以下SQL代码来执行此操作。 但是当我运行这个… 我得到这个错误… OLE DB提供程序’Microsoft.Jet.OLEDB.4.0’不能用于分布式查询,因为该提供程序配置为在单线程单元模式下运行。我究竟做错了什么? 我在32位系统上使用SQL Server Management Studio 2008。 问题答案: 我想

  • 下面尝试过,但是直到并且除非我使Acyah geShipmentIn绑定节点为空(删除释放ID="9.2"xmlns="http://schema.infor.com/InforOAGIS/2"xmlns: xs="http://www.w3.org/2001/XMLSchema")选择查询不获取值。

  • 我正在尝试更新标识列,到目前为止,它不存在于任何关系表中。 如果我运行SQL语句,如图所示: 我得到以下错误: msg 8102, Level 16, State 1, Line 6 无法更新标识列'DomainID'。