这两个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'
你看这样可以不,用了相关子查询: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
你这个方法我也试过,不行.
报错
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
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
@lcqll: 还有一点注意,第一sql查询结果集是51行,整个结果集需保持51行,只是增加列,这点忘了,没描述了,不好意思
@Assur: 你是想以第一列的数据为主,只有Deivce_ID = 'F216FB17B6F8FB874D43E0434BCAC0F1'的条件时查询出来是51列?
红框里的是固定列,有51行,在红框之外的需要动态往上加列,例如,将Param_Value2加在右边(也是51行),Param_Value3加在Param_Value2右边,一次类推...
@Assur: 这样的话说不通的,你的dbo.t_Device_List ON t_Device_List.Device_ID = t_Param_List.Deivce_ID连接查询了,所以它们的Deivce_ID就是相等的,后面再加条件不相等的话实现不了吧
这两个结果集逻辑上如何关联?或者说两个结果集的每一行数据靠啥一一对应?
两个结果集中都有 t_Param_List表,可以关联
@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
可不可以加一欄,然後一個一個entry加上去?
alter table t_Param_List add Param_Value2 varchar(100)
update t_Param_List set Param_Value2=xxx where Param_ID = xxx;
不行,我这个列有n个,是动态拼上去的
@Assur: ok. I see!
我自己解决了,谢谢大家
解决方法
第一个查询a加一个id列,identity(1,1)
第二个查询b也增加一个id列,identity(1,1),
然后将这两个查询合并,where a.id=b.id