0

我的过程中有两个选择,但我只想选择第一个 Select 中的 IDENTIFICACAO_A 与第二个 Select 中的 IDENTIFICACAO_B 相同的行。

询问:

SELECT
(CONVERT(VARCHAR,fic.reg_codigo_lotado_atual) + '.' + CONVERT(VARCHAR,fic.cla_codigo) + '.' + CONVERT(VARCHAR,fic.reg_codigo_lotado_origem) + '.' + CONVERT(VARCHAR,fic.fic_numero_livro) + '/' + CONVERT(VARCHAR,fic.fic_versao)) AS IDENTIFICACAO_A,
cla.cla_nome,
fic.fic_ca,
fic.fic_fa,
fic.reg_codigo_lotado_atual,
fic.cla_codigo,
fic.reg_codigo_lotado_origem,
fic.fic_numero_livro,
fic.fic_versao,
fic.fic_ato_oficial,
fic_localizacao_numero,
fic_localizacao_data_em,
qua.qua_nome,
fic.fic_localizacao_do,
adm.adm_codigo_ua,
adm.adm_codigo_uv,
adm.adm_digito,
adm.adm_decodificada,
adm.adm_sigla,
form.for_nome,
fic.fic_ocupacao_data,
fic.fic_ocupacao_do,
fic.fic_ocupacao_data_cessacao,
fic.fic_ocupacao_do_cessacao,
ser.ser_nome,
ser.ser_rg,
ser.ser_cpf,
fic.fic_ocupacao_observacao,
esp.esp_descricao,
fic.fic_alteracao_vigencia,
fic.fic_alteracao_decreto,
fic.fic_alteracao_data,
fic.fic_alteracao_qua_codigo,
fic.fic_alteracao_do,
fic.fic_situacao_vc,
fic.fic_situacao_pp,
fic.fic_situacao_ocupado,
fic.fic_nova_identificacao,
fic.fic_observacoes_gerais
FROM
SICAF.dbo.tab_fichas AS fic
 INNER JOIN
SICAF.dbo.tab_classes AS cla ON cla.cla_codigo = fic.cla_codigo
 LEFT JOIN
SICAF.dbo.tab_sub_quadros AS qua ON qua.qua_codigo = fic.qua_codigo
 LEFT JOIN
SICAF.dbo.tab_unidade_adm AS adm ON adm.adm_codigo = fic.adm_codigo
 LEFT JOIN
SICAF.dbo.tab_formas AS form ON form.for_codigo = fic.for_codigo
 LEFT JOIN
SICAF.dbo.tab_servidores AS ser ON ser.ser_codigo = fic.ser_codigo
 LEFT JOIN
SICAF.dbo.tab_especies AS esp ON esp.esp_codigo = fic.esp_codigo


SELECT
(CONVERT(VARCHAR,fic.reg_codigo_lotado_atual) + '.' + CONVERT(VARCHAR,fic.cla_codigo) + '.' + CONVERT(VARCHAR,fic.reg_codigo_lotado_origem) + '.' + CONVERT(VARCHAR,fic.fic_numero_livro) + '/' + CONVERT(VARCHAR,fic.fic_versao)) AS IDENTIFICACAO_B,
cla.cla_nome,
fic.fic_ca,
fic.fic_fa,
fic.reg_codigo_lotado_atual,
fic.cla_codigo,
fic.reg_codigo_lotado_origem,
fic.fic_numero_livro,
fic.fic_versao,
fic.fic_ato_oficial,
fic_localizacao_numero,
fic_localizacao_data_em,
qua.qua_nome,
fic.fic_localizacao_do,
adm.adm_codigo_ua,
adm.adm_codigo_uv,
adm.adm_digito,
adm.adm_decodificada,
adm.adm_sigla,
form.for_nome,
fic.fic_ocupacao_data,
fic.fic_ocupacao_do,
fic.fic_ocupacao_data_cessacao,
fic.fic_ocupacao_do_cessacao,
ser.ser_nome,
ser.ser_rg,
ser.ser_cpf,
fic.fic_ocupacao_observacao,
esp.esp_descricao,
fic.fic_alteracao_vigencia,
fic.fic_alteracao_decreto,
fic.fic_alteracao_data,
fic.fic_alteracao_qua_codigo,
fic.fic_alteracao_do,
fic.fic_situacao_vc,
fic.fic_situacao_pp,
fic.fic_situacao_ocupado,
fic.fic_nova_identificacao,
fic.fic_observacoes_gerais
FROM
SICAF2.dbo.tab_fichas AS fic
 INNER JOIN
SICAF2.dbo.tab_classes AS cla ON cla.cla_codigo = fic.cla_codigo
 LEFT JOIN
SICAF2.dbo.tab_sub_quadros AS qua ON qua.qua_codigo = fic.qua_codigo
 LEFT JOIN
SICAF2.dbo.tab_unidade_adm AS adm ON adm.adm_codigo = fic.adm_codigo
 LEFT JOIN
SICAF2.dbo.tab_formas AS form ON form.for_codigo = fic.for_codigo
 LEFT JOIN
SICAF2.dbo.tab_servidores AS ser ON ser.ser_codigo = fic.ser_codigo
 LEFT JOIN
SICAF2.dbo.tab_especies AS esp ON esp.esp_codigo = fic.esp_codigo

我能做些什么来返回两个选择?

4

4 回答 4

1

您可以使用 :

select your_fields from table1

intersect

select your_fields from table2
于 2013-03-07T12:38:12.990 回答
1

使用联合。

将两个查询的键列重命名为相同,我还建议将两个查询保存为临时表。

因此,假设您将第一个查询存储在临时表中q1,第二个查询存储在q2其中,两者的键列都是id.

select from q1 where q1.id in (select id from q2)
union
select from q2 where q2.id in (select id from q1)

希望我很清楚。

于 2013-03-07T13:12:19.727 回答
1

您可以在两个查询之间使用内部联接:

Select * From 
(
SELECT
(CONVERT(VARCHAR,fic.reg_codigo_lotado_atual) + '.' + CONVERT(VARCHAR,fic.cla_codigo) + '.' + CONVERT(VARCHAR,fic.reg_codigo_lotado_origem) + '.' + CONVERT(VARCHAR,fic.fic_numero_livro) + '/' + CONVERT(VARCHAR,fic.fic_versao)) AS IDENTIFICACAO_A,
cla.cla_nome,
fic.fic_ca,
fic.fic_fa,
fic.reg_codigo_lotado_atual,
fic.cla_codigo,
fic.reg_codigo_lotado_origem,
fic.fic_numero_livro,
fic.fic_versao,
fic.fic_ato_oficial,
fic_localizacao_numero,
fic_localizacao_data_em,
qua.qua_nome,
fic.fic_localizacao_do,
adm.adm_codigo_ua,
adm.adm_codigo_uv,
adm.adm_digito,
adm.adm_decodificada,
adm.adm_sigla,
form.for_nome,
fic.fic_ocupacao_data,
fic.fic_ocupacao_do,
fic.fic_ocupacao_data_cessacao,
fic.fic_ocupacao_do_cessacao,
ser.ser_nome,
ser.ser_rg,
ser.ser_cpf,
fic.fic_ocupacao_observacao,
esp.esp_descricao,
fic.fic_alteracao_vigencia,
fic.fic_alteracao_decreto,
fic.fic_alteracao_data,
fic.fic_alteracao_qua_codigo,
fic.fic_alteracao_do,
fic.fic_situacao_vc,
fic.fic_situacao_pp,
fic.fic_situacao_ocupado,
fic.fic_nova_identificacao,
fic.fic_observacoes_gerais
FROM
SICAF.dbo.tab_fichas AS fic
 INNER JOIN
SICAF.dbo.tab_classes AS cla ON cla.cla_codigo = fic.cla_codigo
 LEFT JOIN
SICAF.dbo.tab_sub_quadros AS qua ON qua.qua_codigo = fic.qua_codigo
 LEFT JOIN
SICAF.dbo.tab_unidade_adm AS adm ON adm.adm_codigo = fic.adm_codigo
 LEFT JOIN
SICAF.dbo.tab_formas AS form ON form.for_codigo = fic.for_codigo
 LEFT JOIN
SICAF.dbo.tab_servidores AS ser ON ser.ser_codigo = fic.ser_codigo
 LEFT JOIN
SICAF.dbo.tab_especies AS esp ON esp.esp_codigo = fic.esp_codigo
)tbl1

Inner Join 
(
SELECT
(CONVERT(VARCHAR,fic.reg_codigo_lotado_atual) + '.' + CONVERT(VARCHAR,fic.cla_codigo) + '.' + CONVERT(VARCHAR,fic.reg_codigo_lotado_origem) + '.' + CONVERT(VARCHAR,fic.fic_numero_livro) + '/' + CONVERT(VARCHAR,fic.fic_versao)) AS IDENTIFICACAO_B,
cla.cla_nome,
fic.fic_ca,
fic.fic_fa,
fic.reg_codigo_lotado_atual,
fic.cla_codigo,
fic.reg_codigo_lotado_origem,
fic.fic_numero_livro,
fic.fic_versao,
fic.fic_ato_oficial,
fic_localizacao_numero,
fic_localizacao_data_em,
qua.qua_nome,
fic.fic_localizacao_do,
adm.adm_codigo_ua,
adm.adm_codigo_uv,
adm.adm_digito,
adm.adm_decodificada,
adm.adm_sigla,
form.for_nome,
fic.fic_ocupacao_data,
fic.fic_ocupacao_do,
fic.fic_ocupacao_data_cessacao,
fic.fic_ocupacao_do_cessacao,
ser.ser_nome,
ser.ser_rg,
ser.ser_cpf,
fic.fic_ocupacao_observacao,
esp.esp_descricao,
fic.fic_alteracao_vigencia,
fic.fic_alteracao_decreto,
fic.fic_alteracao_data,
fic.fic_alteracao_qua_codigo,
fic.fic_alteracao_do,
fic.fic_situacao_vc,
fic.fic_situacao_pp,
fic.fic_situacao_ocupado,
fic.fic_nova_identificacao,
fic.fic_observacoes_gerais
FROM
SICAF2.dbo.tab_fichas AS fic
 INNER JOIN
SICAF2.dbo.tab_classes AS cla ON cla.cla_codigo = fic.cla_codigo
 LEFT JOIN
SICAF2.dbo.tab_sub_quadros AS qua ON qua.qua_codigo = fic.qua_codigo
 LEFT JOIN
SICAF2.dbo.tab_unidade_adm AS adm ON adm.adm_codigo = fic.adm_codigo
 LEFT JOIN
SICAF2.dbo.tab_formas AS form ON form.for_codigo = fic.for_codigo
 LEFT JOIN
SICAF2.dbo.tab_servidores AS ser ON ser.ser_codigo = fic.ser_codigo
 LEFT JOIN
SICAF2.dbo.tab_especies AS esp ON esp.esp_codigo = fic.esp_codigo
)tbl2
On tbl1.IDENTIFICACAO_A=tbl2.IDENTIFICACAO_B
于 2013-03-07T12:22:25.363 回答
0

你可以IN在这里使用。T1 是来自第一个查询的连接表组,T2 是来自第二个查询的连接表组。语法如下。

Select col1,col2,...
From T1
Where IDENTIFICACAO_A in (
   Select IDENTIFICACAO_B
   From T2
)

您可以用它们的连接结果替换IDENTIFICACAO_A和列名IDENTIFICACAO_B

如果T1T2(如上所述)相同,则;

SELECT X AS IDENTIFICACAO_A,
   cla.cla_nome,
   fic.fic_ca,...
FROM T1
WHERE X = Y

您可以用它们的字符串连接函数替换X和。Y

于 2013-03-07T12:08:49.263 回答