Sql 如何联接这两个查询?(带联接的select查询和unpivot查询)
以下是我的两个问题Sql 如何联接这两个查询?(带联接的select查询和unpivot查询),sql,sql-server,sql-server-2008-r2,unpivot,Sql,Sql Server,Sql Server 2008 R2,Unpivot,以下是我的两个问题 SELECT EWND.Position, NKey = CASE WHEN ISNULL(Translation.Name, '') = '' THEN EWND.Name ELSE Translation.Name END, Unit = EW_N_DEF.Units FROM EWND INNER JOIN EW_N_DEF ON EW_N_DEF.Nutr_No = EWND.Nutr_No LEFT J
SELECT EWND.Position,
NKey = CASE WHEN ISNULL(Translation.Name, '') = '' THEN EWND.Name
ELSE Translation.Name END, Unit = EW_N_DEF.Units
FROM EWND
INNER JOIN EW_N_DEF ON EW_N_DEF.Nutr_No = EWND.Nutr_No
LEFT JOIN Translation ON Translation.CodeMain = EWND.Nutr_no
WHERE Translation.CodeTrans = 1
ORDER BY EWND.Position
这是非皮沃的
SELECT *
FROM
(SELECT N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34
FROM EWNVal WHERE Code=6035) Test
UNPIVOT
(Value FOR NUTCODE IN
(N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34)
)AS test
查询的输出如下所示:
Position Name Unit
1 Calories
2 Protein g
3 Total Fat g
4 Total Carbs g
5 Calories from Fat
6 Saturated Fat g
7 Trans Fat g
8 Monounsaturated Fat g
9 Polyunsaturated Fat g
select q1.position,
q1.name,
q2.value,
q2.code
from
(
SELECT EWND.Position,
NKey = CASE WHEN ISNULL(Translation.Name, '') = '' THEN EWND.Name
ELSE Translation.Name END, Unit = EW_N_DEF.Units
FROM EWND
INNER JOIN EW_N_DEF
ON EW_N_DEF.Nutr_No = EWND.Nutr_No
LEFT JOIN Translation
ON Translation.CodeMain = EWND.Nutr_no
WHERE Translation.CodeTrans = 1
) q1
full outer join
(
SELECT value, code
FROM
(
SELECT N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34
FROM EWNVal
WHERE Code=6035
) Test
UNPIVOT
(
Value FOR NUTCODE IN
(N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34)
)AS test
) q2
on q1.Position = right(q1.code, len(q1.code)-1)
及
输出必须是这样的
1 Calories 0 N1
2 Protein g 0 N2
3 Total Fat g 0 N3
4 Total Carbs g 0 N4
5 Calories from Fat 0 N5
6 Saturated Fat g 0 N6
7 Trans Fat g 0 N7
8 Monounsaturated Fat g 0 N8
9 Polyunsaturated Fat g 0 N9
两个查询输出的行数相同,但列数不同,是否可以将这两个查询连接起来?我试过工会,但它有我无法解决的问题
提前谢谢 在Union和Union all中,两个结果必须具有相同的列名。对于列,可以使用任何别名,但列名必须相同 你可以参考这个答案
如果根据代码的数字部分和位置,两个查询中的数据是可合并的,那么您可能可以使用如下内容:
Position Name Unit
1 Calories
2 Protein g
3 Total Fat g
4 Total Carbs g
5 Calories from Fat
6 Saturated Fat g
7 Trans Fat g
8 Monounsaturated Fat g
9 Polyunsaturated Fat g
select q1.position,
q1.name,
q2.value,
q2.code
from
(
SELECT EWND.Position,
NKey = CASE WHEN ISNULL(Translation.Name, '') = '' THEN EWND.Name
ELSE Translation.Name END, Unit = EW_N_DEF.Units
FROM EWND
INNER JOIN EW_N_DEF
ON EW_N_DEF.Nutr_No = EWND.Nutr_No
LEFT JOIN Translation
ON Translation.CodeMain = EWND.Nutr_no
WHERE Translation.CodeTrans = 1
) q1
full outer join
(
SELECT value, code
FROM
(
SELECT N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34
FROM EWNVal
WHERE Code=6035
) Test
UNPIVOT
(
Value FOR NUTCODE IN
(N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,N12,N13,N14,N15,N16,N17,N18,N19,N20,N21,N22,N23,N24,N25,N26,N27,N28,N29,N30,N31,N32,N33,N34)
)AS test
) q2
on q1.Position = right(q1.code, len(q1.code)-1)
可以提供样本数据和期望的结果吗?@MANGKANOR这两个记录集是否以任何方式相互关联?我想是的,它是根据其代码连接的,N1代表位置1等等,谢谢你这么多蓝脚!这很有效,我只是将q1.name改为q1.Nkey和其他列名。但这就是我要找的东西!非常感谢^\__^