首页 新闻 会员 周边 捐助

SqlServer查询语句增加一列

0
悬赏园豆:80 [已解决问题] 解决于 2018-05-13 20:36

这两个Sql,如何将第二个Sql查询的列加在第一个查询结果集中?即 Param_Value2加在Param_Value1列的右边。注意,第一sql查询结果集是51行,整个结果集需保持51行,只是增加列

SELECT t_Param_List.Deivce_ID ,
t_Device_List.Deivce_Name_CN ,
t_Param_Define.Param_ID ,
Param_Name_EN ,
Param_Name_CN ,
Unit ,
Param_Value AS Param_Value1
FROM t_Param_Define
LEFT JOIN t_Param_List ON t_Param_List.Param_ID = t_Param_Define.Param_ID
LEFT JOIN dbo.t_Device_List ON t_Device_List.Device_ID = t_Param_List.Deivce_ID
WHERE Deivce_ID = 'F216FB17B6F8FB874D43E0434BCAC0F1'
ORDER BY t_Param_Define.Param_ID ASC

 

 

SELECT Param_Value AS Param_Value2
FROM t_Param_List
WHERE Deivce_ID = '98503477C170CD6234DAF04EDBB954CB'

 

Assur的主页 Assur | 初学一级 | 园豆:6
提问于:2018-01-29 11:17
< >
分享
最佳答案
0

你看这样可以不,用了相关子查询:SELECT t_Param_List.Deivce_ID ,
t_Device_List.Deivce_Name_CN ,
t_Param_Define.Param_ID ,
Param_Name_EN ,
Param_Name_CN ,
Unit ,
Param_Value AS Param_Value1,
(SELECT Param_Value AS Param_Value2
FROM t_Param_List
WHERE Deivce_ID = '98503477C170CD6234DAF04EDBB954CB') 
FROM t_Param_Define
LEFT JOIN t_Param_List ON t_Param_List.Param_ID = t_Param_Define.Param_ID
LEFT JOIN dbo.t_Device_List ON t_Device_List.Device_ID = t_Param_List.Deivce_ID
WHERE Deivce_ID = 'F216FB17B6F8FB874D43E0434BCAC0F1'
ORDER BY t_Param_Define.Param_ID ASC

收获园豆:80
ll...ll | 菜鸟二级 |园豆:233 | 2018-01-29 11:47

你这个方法我也试过,不行.

报错

子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

Assur | 园豆:6 (初学一级) | 2018-01-29 12:02

SELECT t_Param_List.Deivce_ID ,
t_Device_List.Deivce_Name_CN ,
t_Param_Define.Param_ID ,
Param_Name_EN ,
Param_Name_CN ,
Unit ,
Param_Value AS Param_Value1,

a.Param_Value AS Param_Value2
FROM t_Param_Define
LEFT JOIN t_Param_List ON t_Param_List.Param_ID = t_Param_Define.Param_ID
LEFT JOIN dbo.t_Device_List ON t_Device_List.Device_ID = t_Param_List.Deivce_ID

outer apply  t_Param_List a
WHERE Deivce_ID = 'F216FB17B6F8FB874D43E0434BCAC0F1'

and

a.Deivce_ID = '98503477C170CD6234DAF04EDBB954CB'
ORDER BY t_Param_Define.Param_ID ASC

ll...ll | 园豆:233 (菜鸟二级) | 2018-01-29 12:10

@lcqll: 还有一点注意,第一sql查询结果集是51行,整个结果集需保持51行,只是增加列,这点忘了,没描述了,不好意思

Assur | 园豆:6 (初学一级) | 2018-01-29 12:23

@Assur: 你是想以第一列的数据为主,只有Deivce_ID = 'F216FB17B6F8FB874D43E0434BCAC0F1'的条件时查询出来是51列?

ll...ll | 园豆:233 (菜鸟二级) | 2018-01-29 13:21

红框里的是固定列,有51行,在红框之外的需要动态往上加列,例如,将Param_Value2加在右边(也是51行),Param_Value3加在Param_Value2右边,一次类推...

Assur | 园豆:6 (初学一级) | 2018-01-29 15:10

@Assur: 这样的话说不通的,你的dbo.t_Device_List ON t_Device_List.Device_ID = t_Param_List.Deivce_ID连接查询了,所以它们的Deivce_ID就是相等的,后面再加条件不相等的话实现不了吧

ll...ll | 园豆:233 (菜鸟二级) | 2018-01-29 15:34
其他回答(3)
0

这两个结果集逻辑上如何关联?或者说两个结果集的每一行数据靠啥一一对应?

nicky0227 | 园豆:1069 (小虾三级) | 2018-01-29 11:27

两个结果集中都有 t_Param_List表,可以关联

支持(0) 反对(0) Assur | 园豆:6 (初学一级) | 2018-01-29 12:04

@Assur: 我当然知道可以关联,问题是怎么个关联法?你要说用哪个字段关联啊。来求助却连问题都无法分析和表述清楚,真是难过的一件事。

猜了一下你的意图,试试这个:

SELECT T1.*,T2.PARAM_VALUE2 FROM (
SELECT PL.DEIVCE_ID ,
DL.DEIVCE_NAME_CN ,
PD.PARAM_ID ,
PARAM_NAME_EN ,
PARAM_NAME_CN ,
UNIT ,
PARAM_VALUE AS PARAM_VALUE1
FROM T_PARAM_DEFINE PD
LEFT JOIN T_PARAM_LIST PL ON PL.PARAM_ID = PD.PARAM_ID
LEFT JOIN DBO.T_DEVICE_LIST DL ON DL.DEVICE_ID = PL.DEIVCE_ID
WHERE PL.DEIVCE_ID = 'F216FB17B6F8FB874D43E0434BCAC0F1'
ORDER BY PD.PARAM_ID ASC ) T1
LEFT JOIN
(SELECT PARAM_ID,PARAM_VALUE AS PARAM_VALUE2
FROM T_PARAM_LIST
WHERE DEIVCE_ID = '98503477C170CD6234DAF04EDBB954CB') T2
ON T1.PARAM_ID=T2.PARAM_ID

支持(0) 反对(0) nicky0227 | 园豆:1069 (小虾三级) | 2018-01-29 13:01
0

可不可以加一欄,然後一個一個entry加上去?

alter table t_Param_List add Param_Value2 varchar(100)
update t_Param_List set Param_Value2=xxx where Param_ID = xxx;

HingAglaiaWong | 园豆:494 (菜鸟二级) | 2018-01-29 11:37

不行,我这个列有n个,是动态拼上去的

支持(0) 反对(0) Assur | 园豆:6 (初学一级) | 2018-01-29 15:07

@Assur: ok. I see!

支持(0) 反对(0) HingAglaiaWong | 园豆:494 (菜鸟二级) | 2018-01-29 22:51
0

我自己解决了,谢谢大家

解决方法

第一个查询a加一个id列,identity(1,1)

第二个查询b也增加一个id列,identity(1,1),

然后将这两个查询合并,where a.id=b.id

Assur | 园豆:6 (初学一级) | 2018-01-29 15:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册